在javascript中覆盖原型时,对象以两种状态存在
Object exists in two states when overwriting prototype in javascript
我试图了解Javascript中的面向对象编程,并遇到了以下问题:(这是Stoyan Stefanov的书中可以找到的简化示例)
我创建了一个构造函数来创建 Dog 对象:
function Dog(){
this.tail = true;
}
然后我使用 Dog 构造函数实例化一个对象:
var benji = new Dog();
然后我为 Dog 的原型对象分配一个新属性:
Dog.prototype.shout = 'Woof!';
现在,正如预期的那样,Benji可以访问两条尾巴以及喊叫。一切都很好,直到我覆盖了 Dog 的原型:
Dog.prototype = {paw : 4};
现在,benji.paw 变得未定义。我的问题是,benji 不应该也有权访问新的原型对象吗?更令人困惑的是,当我在重新定义原型对象后创建一个新的 Dog 实例时:
var lucy = new Dog();
Lucy.paw 的计算结果为 4。 Lucy 的构造函数对象定义似乎与 Benji 的不同。我很困惑这里发生了什么,有人可以解释一下javascript的对象记忆模型是如何工作的吗?谢谢。
prototype
只是一个对象。
如果你这样做
var oldProto = Dog.prototype
在覆盖它之前
Dog.prototype = { paws: 4 }
然后,您可以使用旧的原型对象来操作其子对象:
oldProto.teeth = true
—> benji.teeth == true
.
相关文章:
- 这两种不同的创建对象文字的方法有什么区别
- 什么'这两种对象构造方法之间的区别是什么
- 用两种方式保存对象,有什么区别
- 在javascript中覆盖原型时,对象以两种状态存在
- JavaScript 对象,使用两种不同的调用函数方式查看预期结果
- 两种 JavaScript 对象类型之间的差异
- 您将如何使用这两种概念上不同的方法来编写javaScript对象
- 使用jQuery.prop&对象文字-两种不同的结果
- 生成javascript对象的两种不同方法
- 从数组中移除对象-两种不同的方法,在查询每个数组的长度时会产生两种不同结果
- 对象定义有两种方式-有什么区别
- 确定对象是否在JavaScript中具有属性的两种方法
- 在使用两种语言时,如何决定是使用JavaScript对象还是使用PHP对象
- 在Javascript中定义对象方法的两种方法之间有什么区别
- 将对象键设置为变量的值-为什么有两种不同的方法
- Javascript中继承对象的两种不同(?)方法
- 这两种定义类/对象的方法有什么区别?
- 这两种获取画布对象的方法有什么区别?
- 在Javascript中向对象添加属性的两种方式的区别
- 改变javascript对象原型的两种方法,它们之间的区别是什么?