为什么不能在箭头功能中访问`this`?

托马斯·里德

下面这段代码应该按预期工作,并记录"meow"这里一个例子

function Cat () {
  this.animalNoise = 'meow' 
}

Cat.prototype.sound = () => {
  console.log(this.animalNoise)
}

let cat = new Cat()
cat.sound()

它不起作用,会出现此错误,TypeError: Cannot read property 'animalNoise' of undefined并且当您将arrow函数转换为实际的function声明时,它将起作用。似乎有了箭头功能,我再也无法访问this这里发生了什么?

需要明确的是,上面的代码在下面的代码中不起作用,我很好奇为什么。

function Cat () {
  this.animalNoise = 'meow' 
}

Cat.prototype.sound = function() {
  console.log(this.animalNoise)
}

let cat = new Cat()
cat.sound()
迈克·克拉克

箭头函数执行词法绑定,并将周围的范围用作的范围this例如,假设(出于某种奇怪的原因)您CatDog构造函数内部进行了定义

function Dog() {
  // do dog like things
  function Cat() { ... }
  Cat.prototype.sound = () => {
    // this == instance of Dog!
  };
}

因此,无论周围范围是什么,都将成为箭头函数的范围。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

console.log 不能在箭头功能中工作

来自分类Dev

我不明白为什么JavaScript中的某些箭头功能的行为不像常规的箭头功能

来自分类Dev

为什么`this`在ES6箭头功能中不起作用?

来自分类Dev

橡子-为什么箭头功能会引发解析错误?

来自分类Dev

什么是双箭头功能?

来自分类Dev

什么是双箭头功能?

来自分类Dev

使用打字稿时不能在手短箭头功能控制台日志

来自分类Dev

JavaScript中的箭头功能

来自分类Dev

为什么我的功能规格不能在RSpec中运行?

来自分类Dev

ES6的箭头功能中的“ this”指的是什么?

来自分类Dev

这段代码中的箭头功能是做什么的?

来自分类Dev

这段代码中的箭头功能是做什么的?

来自分类Dev

为什么我不能在界面中访问此字段?

来自分类Dev

为什么我不能在Vue中访问html canvas?

来自分类Dev

为什么我不能在Mirth中访问xml消息?

来自分类Dev

为什么我不能在班级中访问变量。Python

来自分类Dev

为什么不能在try / catch块中访问变量?

来自分类Dev

为什么不能在语义操作中访问该值?

来自分类Dev

为什么要使用此JavaScript箭头功能或有什么区别?

来自分类Dev

如何使箭头功能在IOS 9.3.1上工作?

来自分类Dev

通过箭头功能在引用中使用变量

来自分类Dev

箭头功能中的花括号

来自分类Dev

对象文字中的箭头功能

来自分类Dev

Netbeans 8.1中的胖箭头功能?

来自分类Dev

Redux语法中的链接箭头功能

来自分类Dev

闭包中的箭头功能

来自分类Dev

角度html中的箭头功能

来自分类Dev

setstate中的箭头功能使用

来自分类Dev

对象中的匿名箭头功能