【发布时间】:2017-03-09 03:43:38
【问题描述】:
我在我的项目中遇到了一个问题,它与JS的原型继承有关。并将主要问题抽象如下:
var parentObj = {
value:"parent value",
obj: {
obj: "parent obj value"
}
}
var childObj = Object.create(parentObj)
以字面量对象的方式创建parentObj,并在其基础上创建childObj,并将其作为原型。
第一种情况如下:
childObj.value ="child value"
childObj.obj = {obj:"child obj value"};
console.log(parentObj)
console.log(childObj)
输出是:
{ value: 'parent value', obj: { obj: 'parent obj value' } }
{ value: 'child value', obj: { obj: 'child obj value' } }
这个结果符合预期。
但是对于第二种情况如下:
childObj.value ="child value"
childObj.obj.obj = "child obj value";
console.log(parentObj);
console.log(childObj);
输出是:
{ value: 'parent value', obj: { obj: 'child obj value' } }
{ value: 'child value' }
parentObj 已更改。这个结果让我有点困惑,有什么帮助吗?
【问题讨论】:
-
我认为它只为子对象返回“子 obj 值”。你能再检查一次吗?或者检查 childObj.__proto__,它会显示 parentObj。
-
@Nitesh,我确认了我发布的结果。
-
读取
childObj.obj属性使用原型继承,得到parent.obj。此时,childObj.obj和parentObj.obj是对同一对象的引用,因此对该对象的修改通过这两种方式都是可见的。
标签: inheritance prototype