9

是否有任何理由编写 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}
4

1 回答 1

18

您使用的功能不是 ES6 的一部分。这是类字段提案。它允许您初始化实例属性,而无需编写构造函数。即你的代码:

class MyClass {

    myMethod = () => {
        this.myVariable++;
    }

}

完全一样

class MyClass {

    constructor() {
        this.myMethod = () => {
            this.myVariable++;
        };
    }

}

这也向您展示了普通类方法和通过类字段创建的方法之间的区别:

  • 一个普通的方法在类的所有实例之间共享(它在原型上定义)
  • 每个实例创建一个“类字段方法”

所以与 JavaScript 中使用“原型”与“这个”中提出的原因相同吗?应用,但简而言之:

  • 如果您需要每个实例的方法,请使用“类字段方法”。需要访问当前实例的事件处理程序就是这种情况。访问this也仅在您使用箭头功能时才有效。
  • 在所有其他情况下使用普通的类方法。
于 2017-08-26T17:40:01.297 回答