2012-05-06 102 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时都会创建一个新的函数对象。这些功能中的每一个都有不同的原型。