我正在读一本关于OOP javascript的书,我被其中的一个例子卡住了。
在示例代码的第一个版本中,创建了Shape构造函数的一个新实例,并调用了toString方法。toString方法返回"Triangle“,它是Triangle原型的name属性,即使"Shape”应该是Shape原型的name属性。
在示例代码的第二个版本中,toString方法按预期返回"Shape“。我想知道代码的第二个版本中的更改有什么不同,因为似乎在两个版本的示例代码中,Triangle原型都包含对Shape原型的引用,因此Shape原型的name属性仍然会因为Triangle.prototype.name = "Triangle";而更新为“Triangle
第一个版本:jsfiddle
第二个版本:jsfiddle
发布于 2012-04-08 10:58:07
在第二个例子中,当你赋值Triangle.prototype = new F();时,一个新的F function实例已经被创建,它继承了Shape的原型,这意味着Triangle.prototype中的任何更改都将反映在该对象实例中,但不会反映在F's constructor中,因为对象实例不能更改其构造函数,但如果您在constructor's prototype/Shape.prototype中更改,则由该构造函数创建的任何对象也将被反映。但如果你被分配了Triangle.prototype = F.prototype,情况可能会有所不同。
我做了一些修改,。希望它能帮助你理解,请看控制台。
发布于 2012-04-08 09:41:17
在第二个示例中,Triangle.prototype获得了一个新的引用-- new F()。因此,与第一个示例不同,Triangle.prototype实际上是一个与Shape.prototype不同的引用。
https://stackoverflow.com/questions/10059713
复制相似问题