Ves*_*smy 6 javascript jsx ecmascript-6 arrow-functions ecmascript-next
有没有理由编写ES6方法的经典语法?
class MyClass {
myMethod() {
this.myVariable++;
}
}
Run Code Online (Sandbox Code Playgroud)
当我myMethod()在某些事件上使用回调时,我必须写这样的东西(在JSX中):
// Anonymous function.
onClick={() => { this.myMethod(); }}
// Or bind this.
onClick={this.myMethod.bind(this)}
Run Code Online (Sandbox Code Playgroud)
但是如果我将方法声明为箭头函数:
class MyClass {
myMethod = () => {
this.myVariable++;
}
}
Run Code Online (Sandbox Code Playgroud)
我只能写(在JSX中):
onClick={this.myMethod}
Run Code Online (Sandbox Code Playgroud)
Fel*_*ing 12
您使用的功能不是ES6的一部分.这是班级字段提案.它允许您初始化实例属性,而无需编写构造函数.即你的代码:
class MyClass {
myMethod = () => {
this.myVariable++;
}
}
Run Code Online (Sandbox Code Playgroud)
与...完全相同
class MyClass {
constructor() {
this.myMethod = () => {
this.myVariable++;
};
}
}
Run Code Online (Sandbox Code Playgroud)
这也向您展示了普通类方法和通过类字段创建的方法之间的区别:
所以与JavaScript中使用'prototype'和'this'中提出的原因一样?申请,但简而言之:
this仅在您使用箭头功能时才有效.