我有以下代码
var createObj = function (prop1, prop2) {
var obj = {
prop1: prop1,
prop2: prop2
}
Object.defineProperty(obj, "prop3", {
get: function () {
return this.prop1 + ' ' + this.prop2;
},
configurable: true
});
return obj;
}
var createSecObj = function () {
var obj = createObj("prop1", "prop2");
var prop3 = obj.prop3;
Object.defineProperty(obj, "prop3", {
get: function () {
return prop3;
}
});
return obj;
}
我正在尝试学习javascript继承的工作方式。
假设一个名为myObj的对象被创建为
myObj = createSecObj();
然后,将myObj.prop3的值记录为控制台
console.log(myObj.prop3) // "prop1 prop2"
然后使用以下命令将myObj.prop1更改为“ blah”
myObj.prop1 = "blah"
再次,如果将myObj.prop3登录到控制台,则结果为“ prop1 prop2”。而不是“ blah prop2”。
console.log(myObj.prop3) // results "prop1 prop2", expecting "blah prop2"
看起来obj.prop3仍引用其父对象。即使在子对象中重新定义它,这也是为什么呢?有人可以详细解释一下吗?
最佳答案
看起来obj.prop3
仍引用其父对象。即使在子对象中重新定义它,这也是为什么呢?
这个问题与继承无关。问题是您用 prop3
var prop3 = obj.prop3; // var prop3 = "prop1 prop2";
Object.defineProperty(obj, "prop3", {
get: function () {
return prop3; // will always return "prop1 prop2"
}
});
obj.prop3
将始终返回变量prop3
的值。变量prop3
的值无法在整个应用程序中更改,并且在创建变量时,其值为"prop1 prop2"
。我不清楚您要在这里实现什么,因此我无法真正提出解决方案。如果要获取
"blah prop2"
,则只需从代码中删除上述行即可。关于javascript - javascript对象继承如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31359370/