我可以解释为什么不能从另一个对象分配值吗? 以及如何从第二个对象更改第一个对象的值?
class Test {
obj1 = {
obj1Value: [1, 2, 3],
};
obj2 = {
changeValue() {
this.obj1.obj1Value = [2, 2, 2];
},
};
}
let test = new Test();
console.log(test.obj1.value); // [1, 2, 3]
test.obj2.changeValue();
console.log(test.obj1.value); // TypeError: Cannot set property 'obj1Value' of undefined ???
答案 0 :(得分:3)
当您执行test.obj2.changeValue()
时,由于this
的方式,在changeValue
内使用obj2
是指Test
而不是this
类绑定有效,请尝试使用箭头功能,以便继承this
以引用Test
:
class Test {
obj1 = {
obj1Value: [1, 2, 3],
};
obj2 = {
changeValue: () => {
this.obj1.obj1Value = [2, 2, 2];
},
};
}
let test = new Test();
console.log(test.obj1.obj1Value);
test.obj2.changeValue();
console.log(test.obj1.obj1Value);
当函数是对象的属性,而您通过对象调用它时,即{{this
绑定中,不需详细介绍obj.func()
绑定(更详细的信息可以在here中找到)。 1}},this
将引用通过其调用的对象,即obj
。如果改为使用f = obj.func; f()
,则this
的行为会有所不同。这与如何调用函数有关。使用箭头函数(也称为匿名函数)取而代之的是从其父上下文继承this
关键字,这就是为什么您可以在test.obj2.changeValue()
引用this
的情况下执行obj2
>
答案 1 :(得分:1)
使用箭头功能,您可以达到正确的范围。像这样:
obj1 = {
obj1Value: [1, 2, 3],
};
obj2 = {
changeValue: () => {
this.obj1.obj1Value = [2, 2, 2];
},
};