在这种情况下
var A = function(){
this.d = 123;
}
A.prototype.c = 999;
A.prototype.d = 333;
var B = (new A()).constructor;
console.log(""+B);
console.log(new A().d); // 123
console.log(new B().d); // 123
console.log(new A().c); // 999
console.log(Object.getPrototypeOf(new B()).c); // 999 why?
A和B共享相同的构造函数,但B不是A,为什么具有相同的A原型?
在这种情况下
var A = function(){
this.d = 123;
}
A.prototype.c = 999;
A.prototype.d = 333;
var B = A.constructor;
console.log(""+B);
console.log(new A().d); // 123
console.log(new B().d); // undefined
console.log(B.d); // still undefined
console.log(new A().c); // 999
console.log(Object.getPrototypeOf(new B()).c); // undefined
B是A的构造函数,而不是他的实例
B是什么?如何在没有A实例的情况下访问A的构造函数?
调用时new A()
,将创建一个A
原型为的新对象A.prototype
。当您要求时(new A()).constructor
,您constructor
将从该A
实例的原型链中访问该属性。这将是A.prototype.constructor
。
A
本身就是一个Function
对象。也就是说:A
是的实例Function
。当您要求时A.constructor
,您constructor
将从该Function
实例的原型链中访问该属性。这将是Function.prototype.constructor
。
在您的第一种情况下,B
和A
是对完全相同的功能的引用。它完全预计的结果new A()
和new B()
将具有相同的属性和相同的原型链。
在你的第二个例子,B
是Function
构造-即,构造函数的函数。调用将new B()
创建一个新Function
对象。因此,的结果new B()
没有与A
实例相同的属性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句