鉴于此代码:
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的正确方法是什么?
答案 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