Javascript对象原型参考

时间:2012-05-06 20:50:21

标签: javascript node.js prototype

据我所知,下面的第二个案例应该是真的,但事实上它是错误的。那么为什么不是这样呢?

案例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

4 个答案:

答案 0 :(得分:3)

在第一种情况下,Pget()是预定义的全局变量。在第二个中,它们是定义PP的函数的本地,因此,每个实例都有不同的引用。

答案 1 :(得分:2)

在顶部,您有一个new P

在第二个中,您在函数中有new P,然后使用该函数的new

这可能搞砸了。

没关系,这是因为全球变量,就像他说的那样。

答案 2 :(得分:2)

在第一种情况下var p = new P,q = new P;都实例化了全局P并且它是原型,所以它返回true。

在第二种情况下,qp都是使用new PP实例化的不同对象,使用PPP函数内部返回了不同的return new P }。所以它返回false。

答案 3 :(得分:2)

当您调用PP函数时,每次调用P时都会创建一个新的函数对象。这些功能中的每一个都有不同的原型。