如何通过属性指定箭头功能在声明中绑定它?

时间:2017-12-20 15:46:06

标签: javascript ecmascript-6

鉴于此课程

class Car {
  foo() {
    console.log(this)
  }

  bar = () => {
    console.log(this)
  }

  baz = function() {
    console.log(this)
  }
}


let car = new Car();

let a = car.foo;
let b = car.bar;
let c = car.baz;



a() // undefined

b() // car object

c() // undefined

属性如何指定箭头函数在声明时绑定this的值?

我认为箭头函数使用执行上下文的this值,而不是声明。

2 个答案:

答案 0 :(得分:2)

这不是ES6代码。您正在使用类字段提案。类字段基本上只是用于编写通常进入构造函数的代码的语法糖。

ES6等价物将是

class Car {
  foo() {
    console.log(this)
  }

  constructor() {
    this.bar = () => {
      console.log(this)
    };

    this.baz = function() {
      console.log(this)
    };
  }
}
  

我认为箭头函数使用执行上下文的this值,而不是声明。

我不太清楚你的意思,但箭头函数中的this值可以解释,就像任何其他变量一样。并且在定义箭头函数时已经设置了封闭执行上下文的this值。

鉴于类字段如何工作,我们现在可以看到为什么arrow函数具有对实例的引用:在构造函数this内部引用实例,箭头函数以词法方式解析this

答案 1 :(得分:0)

在箭头函数之前,每个新函数都定义了它自己的这个值(在构造函数的情况下是一个新对象,在严格模式函数调用中是未定义的,如果该函数被调用为&#34,则为基础对象;对象方法&# 34;等)。事实证明,面向对象的编程风格并不理想。

Source