当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《为什么不能在箭头功能中访问`this`?》经验,为你挑选了1个好方法。

下面这段代码应该按预期工作,并记录"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()

Mike Cluck.. 6

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

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

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



1> Mike Cluck..:

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

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

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

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有