为什么我不能将Parent.prototype指定给Son.prototype

时间:2015-07-17 11:35:23

标签: 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__找到原型,可能就像一个指针,但为什么我不能直接引用Parent.prototype

2 个答案:

答案 0 :(得分:2)

“父”原型对象上没有“foo”属性。 Parent()构造函数在构造的每个实例上放置一个“foo”属性。

因此,您在两个构造函数之间成功共享相同的原型对象,但这并不能实现代码期望它实现的目标。

如果您的代码已明确地将“foo”属性添加到“Parent”原型中,如下所示:

function Parent() {}
Parent.prototype.foo = "this is foo";

然后这会起作用:

function Son() {}
Son.prototype = Parent.prototype;
alert(new Son().foo); // "this is foo"

现在,共享原型对象肯定是你可以做的事情,但它有点不寻常。

答案 1 :(得分:1)

因为this.foo不在原型中。它无法以第一种方式访问​​。 创建实例时,这意味着son拥有在父级中声明的foo对象。

有关原型的清晰说明请参阅:http://javascriptissexy.com/javascript-prototype-in-plain-detailed-language/