我们如何在 ES7 中调用 class 中的方法?

How can we call a method inside class in ES7?

ES6 简单示例

class MyClass extends SuperClass {
  constructor() {
    super()
    this.myProperty = 'myProperty'
  }
}

在ES7中,上面的例子可以写成:

class MyClass extends SuperClass {
  myProperty = 'myProperty'
}

在 ES6 中,我们可以像这样在构造函数中调用一个方法:

import myMethod from './myMethod'
class MyClass extends SuperClass {
  constructor() {
    super()
    myMethod()
  }
}

在ES7中,如何调用一个会被标注为constructor方法的方法?

import myMethod from './myMethod'
class MyClass extends SuperClass {
  myMethod()
}

Syntax error: Unexpected token, expected {


PS:我知道我仍然可以使用 ES6 语法。但是有没有不写构造函数的方法呢?

TL;DR - 你不能,你应该像在 ES6 中那样做。

您对属性所做的操作是 class fields declaration proposal 的一部分,您想要的方法声明不是该提案的一部分。

该提案目前处于第 3 阶段,这意味着它还不是官方 ECMAScript 规范的一部分,但可能很快就会出现(也许在 ES2019 中?)。因此,我什至建议不要使用您在示例中使用的 class 属性,因为它的语法仍可能发生变化。

这是一种 可能的 方法,无需编写构造函数即可实现,但这不是您应该做的事情 - class 字段用于分配的属性实例化对象。如果它不是对象的 属性,则应该在构造函数中完成。

function myMethod() {
  console.log('method running');
}

class SuperClass { }
class MyClass extends SuperClass {
  someIrrelevantPropName = (myMethod(), undefined)
}
const someInstantiation = new MyClass();

请注意,这实际上会将 undefined 分配给 someInstantiation.someIrrelevantPropName。也就是说,'someIrrelevantPropName' in someInstantiation 将计算为 true,因此这个逗号运算符利用并非没有副作用。