2012-05-06 101 views
1

按我的知識,下面的第二種情況應該是真實的,但實際上它是假的。那爲什麼它不是真的?JavaScript對象原型參考

案例1

 var P = function(){}; 
     P.prototype.get = function(){}; 

    var p = new P,q = new P;   
    console.log(q.__proto__ === p.__proto__) //true 

案例2

var PP = function(){ 
    var P = function(){}; 
    P.prototype.get = function(){}; 
    return new P; 
}; 

var p = PP(), q = PP(); 
console.log(q.__proto__ === p.__proto__) //false 
+0

非常感謝Geeks,我發現了這個錯誤。 –

回答

3

在第一種情況,和Pget()是預定義的全局變量。第二,它們對定義PP的函數是局部的,因此對每個實例都有不同的參考。

2

在頂部的一個,你有一個new P

在第二,你在函數有new P然後取該函數的new

這可能搞砸了。

沒關係,這是因爲全局變量的,他說的那樣。

+0

額外新增了我的錯誤(2例)。 p和q的對象是不相等的,即使去掉多餘的新 –

+0

@Ganesh Kumar-後,如果你刪除它檢查出來的第二個新的給我 – PitaJ

+0

感謝pitaj .... –

2

在第一種情況下,var p = new P,q = new P;都實例化了全局P及其原型,所以它返回true。

在第二種情況下qp是使用new PP其中使用return new P從內側PP函數返回不同P兩個不同的對象實例化。所以它返回false。

+0

任何想法編輯後 –

+0

對不起,沒有得到它,你問什麼? –

+1

好,我弄錯了;謝謝 –

2

當您調用PP函數時,每次調用P時都會創建一個新的函數對象。這些功能中的每一個都有不同的原型。