我很困惑,有时在不同的项目中我会写

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描述了预设的某些阶段,并描述了某个功能所在的开发阶段。

10-06 12:20
查看更多