在附加到对象属性的javascript函数中使用“ this”

时间:2019-06-27 03:07:39

标签: javascript arrays function object ecmascript-6

修改: 称为重复项的问题并没有真正回答为什么不应该使用箭头函数来访问非词汇的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上的。所以我不太确定自己在做什么错。

1 个答案:

答案 0 :(得分:1)

不要使用箭头功能-它会丢失与您试图访问的this的绑定。只需使用常规功能即可:

const setFavorite = function(val) {...};