2015-09-04 58 views
3

其實我只是在研究JavaScript modules。他們是非常容易的,但我卡住了,當涉及到單個模塊 這裏的多個instances是我的代碼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 

,我如何能實現我的國防部這種行爲,我應該去爲另一種編程技術?但我不想使用new關鍵字提前致謝! 這裏是fiddle

回答

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); 
+0

那麼這裏怎麼實現呢? – maq

+0

在jQuery中bcoz我們不使用'新' – maq

+0

感謝jquery代碼,但仍然無法弄清楚我可以如何在這裏使用它? – maq