我有以下代码

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/

10-09 04:08