Javascript模块多个实例

时间:2015-09-04 21:50:47

标签: javascript jquery

其实我只是在研究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

1 个答案:

答案 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);