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语法。但是有没有不用编写构造函数的方法吗?
答案 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
,因此这种逗号运算符的利用并非没有副作用。