javascript - 为什么我不能将 Parent.prototype 分配给 Son.prototype

标签 javascript prototype

我很困惑为什么我不能正确理解以下代码

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/

相关文章:

javascript - 使用 jQuery 禁用页面上的所有内容。破解我的代码

javascript - 获取所有表单数组到JS数组

javascript - jQuery 链接故障

javascript - 是否也应避免通过符号扩展内置 Javascript 原型(prototype)?

javascript - 如何在javascript中检查instanceof而不使用proto链?

javascript - Javascript 中的继承

javascript - 如何缓存或预渲染 Canvas 动画

javascript - 如何在 d3 map 中鼠标悬停时显示属性文本

javascript - 防止 ASP.NET MVC 在 Html Helper ID 中用下划线替换句点

javascript - 通过原型(prototype)为实例定义一个独特的方法