ES6类字段箭头功能作用域问题

时间:2019-08-24 20:38:51

标签: javascript function this arrow-functions

我将我的arrow函数分配给了外部变量,但我不明白为什么这是指``动物''构造函数。当我调用函数“ fun”时,它会打印出来 “动物,真实”。但是我认为它会显示“ Window,false”。

function Animal() {
  this.sleep = () => {
    console.log(this, this instanceof Animal)
  }
}

let animal = new Animal();
animal.sleep(); // Animal, true

let fun = animal.sleep
fun = animal.sleep;
fun() // Animal, true -- why?

1 个答案:

答案 0 :(得分:2)

箭头函数解析this lexically,就像其他任何变量一样。这意味着this的值不是 取决于函数如何被调用,而是取决于定义的方式/位置。 / p>

sleep函数在Animal构造函数中定义,该构造函数用new调用。因此,this将引用Animal的新实例。