我们如何在ES7的类内部调用方法?

时间:2018-08-13 09:54:02

标签: javascript ecmascript-7

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中,如何调用将被称为构造方法的方法?

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

语法错误:意外的令牌,预期{


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

2 个答案:

答案 0 :(得分:1)

TL; DR-不能,您应该像在ES6中一样进行操作。

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

该提案目前处于第3阶段,这意味着它尚未成为官方ECMAScript规范的一部分,但可能很快就会发布(也许在ES2019中?)。因此,我什至不建议您在示例中使用的类属性,因为它的语法可能仍会更改。

答案 1 :(得分:1)

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

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,因此这种逗号运算符的利用并非没有副作用。