其实我只是在研究JavaScript modules
。它们非常简单,但是当涉及多个instances
单个模块时,我陷入困境
这是我的代码
var Mod = (function() {
var ops;
ops = function () {
var Num;
this.set = function (e) {
Num = e;
return this;
};
this.get = function() {
return Num;
};
};
return new ops();
})();
但是当我做的时候
console.log(a = Mod.set(1));
console.log(b = Mod.set(2));
console.log(a.get()); // output 2 :'(
console.log(a == b); // true :/
我不明白为什么会这样?可能是因为Mod
匿名函数只调用一次,但现在我的问题是Jquery $
如何工作?
如
a = $("div")
b = $("span")
console.log(a == b) // false
如何使用我的Mod实现这种行为?我应该采用另一种编程技术吗?但我不想提前使用new
关键字感谢!
这是fiddle
答案 0 :(得分:2)
为什么会这样?可能是因为Mod匿名函数只调用一次
是的,你理解得对。您只有一个实例,单个对象,因此a
确实只是b
的另一个名称。
但现在我的问题是Jquery $是如何工作的?
jQuery正确构建新实例(请参阅source code),顺便使用new
关键字,但由于某种原因,您不想使用该关键字。
UPD。以下是正确实例化的一种方法:
var Mod = (function() {
function ops(value) {
this.value = value;
}
ops.prototype.get = function() {
return this.value;
};
return {
set: function(value) {
return new ops(value);
}
};
})();
console.log(a = Mod.set(1));
console.log(b = Mod.set(2));
console.log(a.get());
console.log(a === b);