JavaScript模块多实例

3

实际上,我只是在学习JavaScript模块。它们非常简单,但当涉及到单个模块的多个实例时,我遇到了困难。以下是我的代码:

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 关键字。谢谢!这里是示例代码

1个回答

2
为什么会发生这种情况?可能是因为Mod匿名函数只调用一次。
是的,你理解得没错。你只有一个实例,单个对象,所以a确实只是b的另一个名称。
但现在我的问题是Jquery $是如何工作的?
jQuery通过正确构造新实例(参见源代码)来工作,顺便说一下,它使用了你不想使用的new关键字。
更新。以下是一种正确实例化的方法:
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);

那么在这里如何实现呢? - maq
因为在 jQuery 中我们不使用 new - maq
谢谢提供 jQuery 代码,但我仍然不知道如何在这里使用它? - maq
你能描述一下你想要的代码的预期使用方式吗? - dfsq
a = Mod,set(1)和b = Mo.set(2)应该是不同的;这就是我想要的。 - maq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接