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 

在第一种情况下, Pget()是预定义的全局variables。 第二,它们是定义PP的函数的局部,因此,每个实例都有不同的参考。

在第一个,你有一个new P

在第二个,你有new P在function,然后采取new的function。

这可能会把它搞砸。

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

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

在第一种情况下var p = new P,q = new P; 都实例化全球P和它的原型,所以它返回true。

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