我很困惑,有时在不同的项目中我会写
class Foo {
static BAR = {
foobar: 'baz'
}
}
有时无法编译,我不得不写
class Foo {
static get BAR() {
return {
foobar: 'baz'
}
}
}
我真的不喜欢第二种语法,第一种更加简洁。问题在于,第一种语法在一个项目中有效,而在另一个项目中,则引发语法错误,我不知道为什么。
似乎使用不同的Babel预设会有效果。不同的ECMAScript版本对此有不同的定义吗?
最佳答案
区别在于,一个是静态class property,而另一个是static method,这是一个特定的获取器。类属性是Babel stage-2
preset 1的一部分。每个链接:
阶段2:草稿
它是什么?规范中的第一个版本。在这一点上,最终可能将该功能包含在标准中。
因此,类属性尚未成为ECMAScript的一部分,但将来可能会在更高版本的ECMAScript 2016中成为规范的一部分。另一方面,静态方法已成为ECMAScript 2015规范的一部分,因此浏览器支持ECMAScript 2015已经允许您执行此操作。
1 here描述了预设的某些阶段,并描述了某个功能所在的开发阶段。