原型混淆:受子原型影响的父原型属性
prototype confusion: parent prototype property affected by child prototype
我正在读一本关于OOP javascript的书,却被困在其中一个例子上。
在示例代码的第一个版本中,将创建 Shape
构造函数的新实例并调用 toString
方法。toString
方法返回"Triangle",这是Triangle
原型的name
属性,即使"Shape"应该是Shape
原型的name
属性。
在示例代码的第二个版本中,toString
方法按预期返回"Shape"。我想知道代码第二版中的更改如何产生任何影响,因为似乎在示例代码的两个版本中,Triangle
原型都包含对Shape
原型的引用,因此Shape
原型的name
属性仍将更新为"三角形"
Triangle.prototype.name = "Triangle";
第一个版本:JSFIDDLE
第二个版本:JSFIDDLE
在第二个示例中,当您分配Triangle.prototype = new F();
时,已经创建了F function
的新实例,并且它继承了Shape
的原型,这意味着Triangle.prototype
中的任何更改都将反映在该对象实例中,而不是F's constructor
中,因为对象实例无法更改其构造函数,但是如果您在constructor's prototype/Shape.prototype
中进行更改,则该构造函数创建的任何对象也将反映。但是,如果您被分配Triangle.prototype = F.prototype
情况可能会有所不同。
我在这里做了一些更改。希望它能帮助您理解,请在控制台中查看。
在第二个示例中,Triangle.prototype 获得了一个新的引用 - new F()。 因此,与第一个示例不同,Triangle.prototype 实际上是与 Shape.prototype 不同的引用。
- 附加到原型属性的Do函数没有闭包
- 日期原型属性
- JS构造函数的原型属性与其原型之间的区别
- 为什么函数对象的实例没有继承函数原型属性
- 为什么浏览器显示原型属性不同
- 为什么在Function.prototype上没有原型属性
- 函数的原型属性
- 原型继承和原型属性
- 在JavaScript中,函数的默认值是多少'的原型属性
- Chrome 不支持 Javascript 中的原型属性吗?
- 我应该在JavaScript中将什么连接到子原型属性
- 更新 JavaScript 中的原型属性
- 请解释有关 JavaScript 中的原型属性和函数构造函数的详细信息
- 为什么原型函数无法读取原型属性
- 与对象属性同名的原型属性
- 如何获取原型属性列表
- 构造函数中的方法与函数的原型属性之间的差异
- JavaScript 原型属性
- 函数对象__proto__和原型属性
- 未在自定义 OL3 控件的构造函数中定义的原型属性