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
在第一种情况下, P
和get()
是预定义的全局variables。 第二,它们是定义PP的函数的局部,因此,每个实例都有不同的参考。
在第一个,你有一个new P
在第二个,你有new P
在function,然后采取new
的function。
这可能会把它搞砸。
没关系,这是因为全球变数,就像他说的那样。
当你调用PP
函数时,每次调用P
时都会创build一个新的函数对象。 这些function中的每一个都有不同的原型。
在第一种情况下var p = new P,q = new P;
都实例化全球P
和它的原型,所以它返回true。
在第二种情况下, q
和p
都是使用new PP
实例化的不同的对象,它使用return new P
从PP
函数内部返回不同的P
所以它返回false。