有没有理由编写ES6方法的经典语法?
class MyClass {
myMethod() {
this.myVariable++;
}
}
当我在某个事件上使用myMethod()
作为回调时,我必须写这样的东西(在JSX中):
// Anonymous function.
onClick={() => { this.myMethod(); }}
// Or bind this.
onClick={this.myMethod.bind(this)}
但是如果我将方法声明为箭头函数:
class MyClass {
myMethod = () => {
this.myVariable++;
}
}
比我只能写(在JSX中):
onClick={this.myMethod}
答案 0 :(得分:11)
您使用的功能不属于ES6。这是class fields proposal。它允许您初始化实例属性,而无需编写构造函数。即你的代码:
class MyClass {
myMethod = () => {
this.myVariable++;
}
}
与
完全相同class MyClass {
constructor() {
this.myMethod = () => {
this.myVariable++;
};
}
}
这也向您展示了普通类方法与通过类字段创建的方法之间的区别:
所有与Use of 'prototype' vs. 'this' in JavaScript?中提出的理由相同,但简而言之:
this
。