修改:
称为重复项的问题并没有真正回答为什么不应该使用箭头函数来访问非词汇的this的问题。它只是回答了箭头功能会自动将此绑定。我的情况是使用箭头功能而不是普通功能会使我失去对此的正确引用。如果您需要this
在当前范围之外,请使用常规功能。
我一直在寻找解决问题的办法,但是没有运气。即使就我需要做的事情向正确的方向发展,这也很棒!我的问题本质上是this.Favkey
在这里未定义:
const setFavorite = val => {
console.log(this);
this.Favorite = val;
AsyncStorage.setItem(this.Favkey, JSON.stringify(val));
};
此功能正被分配给特定对象,如下所示:
for (const obj of objArray) {
obj.Favkey = `c${obj['-id=']}`;
obj.Favorite = await getFavorite(obj.Favkey);
obj.SetFavorite = setFavorite;
}
然后我稍后在按钮上调用它:
onPress={val => props.myObj.SetFavorite(val)}
在第一段代码中,我希望this
是要尝试将函数包含在其中的特定obj
。但是this.Favkey
中的setFavorite
未定义。我认为console.log(this)
的整个原型是打印在Object
上的。所以我不太确定自己在做什么错。
答案 0 :(得分:1)
不要使用箭头功能-它会丢失与您试图访问的this
的绑定。只需使用常规功能即可:
const setFavorite = function(val) {...};