如何从嵌套对象函数中访问对象属性?

时间:2018-01-02 13:23:08

标签: javascript

鉴于此代码:

var myObj = new Object({
data: {
    val_a: 1, 
    val_b: 2
},

myfuncs: {
    first_func: function() {
        this.data.val_b = 3;
    }
}
});

为什么会失败:

myObj.myfuncs.first_func()

有错误:

  

VM154:9未捕获的TypeError:无法设置undefined的属性“val_b”       at Object.first_func(:9:20)       at:1:15

但这有效:

myObj.data.val_b

从first_func访问data.val_b的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

因为在first_func的来电中,this指的是myObj.myfuncs,而不是myObj。更多:How does the “this” keyword work?

由于您的对象是一次性的,因此您只需使用myObj



var myObj = {
  data: {
    val_a: 1,
    val_b: 2
  },
  myfuncs: {
    first_func: function() {
      myObj.data.val_b = 3;
    }
  }
};
myObj.myfuncs.first_func();
console.log(myObj.data.val_b); // 3




(请注意,对new Object的调用既不必要也不可取。只需直接使用对象初始值设定项({...})的结果。)

答案 1 :(得分:1)

获得this.访问权限的一种方法是使用Arrow function而不创建自己的this.
在您的示例first_func: function() {中创建了一个新的this.

var myObj = new Object({
  data: {
    val_a: 1,
    val_b: 2
  },
  myfuncs: {
    first_func: () => {
      this.myObj.data.val_b = 3;
    }
  }
});
myObj.myfuncs.first_func();
console.log(myObj.data.val_b); // 3