我很困惑为什么我不能正确理解以下代码
function Parent(){
this.foo = 'bar';
}
function Son(){}
// if I do this
Son.prototype = Parent.prototype;
new Son().foo;
// output undefined
// try normal way
Son.prototype = new Parent();
new Son().foo;
// output 'bar'
在我看来,实例son
是通过__proto__
找到它的原型(prototype)的,可能像一个指针,但为什么我不能直接引用Parent.prototype
?
最佳答案
“Parent”原型(prototype)对象上没有“foo”属性。 Parent()
构造函数在每个构造的实例 上放置一个“foo”属性。
因此,您成功地在两个构造函数之间共享了同一个原型(prototype)对象,但这并没有达到您的代码期望的效果。
如果您的代码像这样向“Parent”原型(prototype)显式添加了“foo”属性:
function Parent() {}
Parent.prototype.foo = "this is foo";
那么这会起作用:
function Son() {}
Son.prototype = Parent.prototype;
alert(new Son().foo); // "this is foo"
现在,共享原型(prototype)对象当然是您可以做的事情,但这有点不寻常。
关于javascript - 为什么我不能将 Parent.prototype 分配给 Son.prototype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31474907/