我想写一个JS库并像这样处理它:
var c1 = Module.Class();
c1.init();
var c1 = Module.Class();
c2.init();
当然,c1和c2不能共享相同的变量。 我想我知道如何用对象做这件事,那就是:
var Module = {
Class = {
init = function(){
...
}
}
}
但问题是,如果我用这种方式编写,我就不能拥有多个Class实例。 所以我试图用功能实现同样的目标,但我认为我做得不对。
(function() {
var Module;
window.Module = Module = {};
function Class( i ) {
//How can "this" refer to Class instead of Module?
this.initial = i;
}
Class.prototype.execute = function() {
...
}
//Public
Module.Class = Class;
})();
如果可能的话,我不知道,但我接受其他方式的建议来创建这个模块。 我不知道它是否也有用,但我在这个库中使用了jQuery。
答案 0 :(得分:14)
用法:
var c1 = Module.Class("c");
var c2 = Module.Class("a");
var n = c1.initial(); // equals 'c'
c1.initial("s");
n = c1.initial(); // equals 's'
模块代码:
(function(window) {
var Module = window.Module = {};
var Class = Module.Class = function(initial)
{
return new Module.Class.fn.init(initial);
};
Class.fn = Class.prototype = {
init: function(initial) {
this._initial = initial;
},
initial: function(v){
if (v !== undefined) {
this._initial = v;
return this;
}
return this._initial;
}
};
Class.fn.init.prototype = Class.fn;
})(window || this);
这是使用JavaScript“模块”设计模式;这与JavaScript库(如jQuery)使用的设计模式相同。
这是关于“模块”模式的一个很好的教程: JavaScript Module Pattern: In-Depth