我们如何在 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
,因此这个逗号运算符利用并非没有副作用。
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
,因此这个逗号运算符利用并非没有副作用。