我想写一个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。
最佳答案
用法:
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
关于object - 编写一个 javascript 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7541099/