原型困惑:受孩子父母样机原型属性(prototype confusion: parent proto

2019-09-16 10:10发布

我在读一本关于面向对象的JavaScript和被困在其中一个例子。

在示例代码的第一个版本,所述的新实例Shape创建构造函数和所述toString方法被调用。 该toString方法返回一个“三角”,这是name的财产Triangle雏形,尽管“形状”应该是name的物业Shape雏形。

在示例代码的第二版本,所述toString方法返回“形状”如预期。 我想知道在代码的第二个版本的变化是如何做出的任何区别,因为它似乎是在示例代码的两个版本中, Triangle原型持有到一个参考Shape样机,因此name中的财产Shape样机将仍然是更新为“三角”,因为Triangle.prototype.name = "Triangle";

第一个版本: 的jsfiddle

第二个版本: 的jsfiddle

Answer 1:

在第二个例子中,当您分配Triangle.prototype = new F(); 随后的新实例F function已经被创建和它继承了原型Shape ,这意味着在任何更改Triangle.prototype将在对象实例中反映出来,但没有在F's constructor ,因为一个对象实例不能改变它的构造,但如果您在更改constructor's prototype/Shape.prototype那么也将被反映,通过构造函数创建的对象。 但是,如果你被分配Triangle.prototype = F.prototype它可能是不同的。

我做了一些改变这里 。 希望它会帮助你了解,在控制台中看到。



Answer 2:

在第二示例中,Triangle.prototype得到一个新的参考 - 新F()。 因此,与在第一个例子,Triangle.prototype实际上比Shape.prototype不同的参考。



文章来源: prototype confusion: parent prototype property affected by child prototype