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

标签 javascript arrays function object ecmascript-6

编辑: 被称为重复的问题并没有真正回答为什么不应该使用箭头函数来访问非词法 this。它只是回答箭头函数自动绑定(bind) 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.FavkeysetFavorite未定义。 console.log(this) 上打印出的内容就是我认为的Object的整个原型(prototype)。所以我不太确定我在这里做错了什么。

最佳答案

不要使用箭头函数 - 它会丢失与您要访问的 this 的绑定(bind)。只需使用普通函数即可:

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

关于javascript - 在附加到对象属性的 javascript 函数中使用 'this',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56783350/

相关文章:

javascript - 将所有对象一次调用到函数中,并返回每个对象的特定计算?

php - 用 JS 设置 cookie,用 PHP 问题读取

javascript - Jest 无法使用 Typescript 导入(SyntaxError : Cannot use import statement outside a module)

javascript - 使用 jQuery Mobile 时在加载时重置 css

c - 如何将文件中的行存储到动态数组中并打印?

c++ - 如何跨多个函数使用变量?

Javascript 错误似乎只在 IE8 中出现

php - 检查字符串是否包含数组,如果包含则将数组中的值输出到新变量中

Java - 将带有列表变量的对象转换为对象列表

Bash 函数参数未按预期传递