编程语言
首页 > 编程语言> > javascript – 为什么我不能在箭头函数中访问`this`?

javascript – 为什么我不能在箭头函数中访问`this`?

作者:互联网

参见英文答案 > What does “this” refer to in arrow functions in ES6?                                    6个
下面的代码应按预期工作,并记录“meow”,here an example.

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

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

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

它不起作用,此错误出现TypeError:无法读取未定义的属性’animalNoise’,当您将箭头函数转换为实际的函数声明时,它可以工作.看起来像箭头功能,我不再能够访问它.这里发生了什么?

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

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

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

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

解决方法:

Arrow functions perform lexical binding并使用周围的范围作为此范围.例如,想象(出于一些奇怪的原因)你在Dog构造函数中定义Cat.

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

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

标签:arrow-functions,javascript,ecmascript-6,this
来源: https://codeday.me/bug/20190829/1761522.html