javascript对象继承如何工作?

它昨天工作了。

我有以下代码

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仍引用其父对象。即使在子对象中重新定义它,这也是为什么呢?有人可以详细解释一下吗?

费利克斯·克林(Felix Kling)

看起来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将始终返回变量 的值prop3prop3整个应用程序中,该变量的值无法再更改,并且在创建变量的那一刻,其值为"prop1 prop2"

我不清楚您要在这里实现什么,因此我无法真正提出解决方案。如果要获取,"blah prop2"则只需从代码中删除以上行即可。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章