1

据我所知,下面的第二种情况应该是正确的,但实际上是错误的。那么为什么不是真的呢?

情况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

4 回答 4

3

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

于 2012-05-06T20:59:00.297 回答
2

在顶部,您有一个new P.

在第二个中,您拥有new P该功能,然后使用new该功能。

这可能搞砸了。

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

于 2012-05-06T21:00:54.030 回答
2

在第一种情况下var p = new P,q = new P;,两者都实例化了全局P和原型,因此它返回 true。

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

于 2012-05-06T21:03:39.370 回答
2

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

于 2012-05-06T21:08:09.567 回答