2017-05-12 11 views
0

我很困惑,在不同的項目中,我有時會寫爲什麼靜止無功語法有時拋出一個錯誤,有時不

class Foo { 
    static BAR = { 
    foobar: 'baz' 
    } 
} 

而且有時這不能編譯,而是我必須寫

class Foo { 
    static get BAR() { 
    return { 
     foobar: 'baz' 
    } 
    } 
} 

我真的不喜歡第二種語法,第一種語法要簡潔得多。問題是第一種語法在一個項目中工作,在另一個項目中它引發了語法錯誤,我不知道爲什麼。

它似乎使用不同的巴別克預設有一個效果。不同的ECMAScript版本對此有不同的定義嗎?

+1

你的兩個定義不這樣做完全是一回事。在第一個中,你可以做'Foo.BAR.foobar ='whatever'',但在第二個,它只是一個getter,它不存儲你設置的值。 – jfriend00

+2

第一個片段使用[Babel插件](https://babeljs.io/docs/plugins/transform-class-properties/)。這不是任何標準的一部分。 – 4castle

回答

1

不同之處在於一個是靜態的class property而另一個是static method,這是一個具體的getter。班級屬性是Babel的stage-2 preset 的一部分。每鏈接:

第2階段:草案

這是什麼?規範中的第一個版本。此時,標準中最終可能包含該特徵。

因此,類屬性不是ECMAScript中的一部分還,但可能會在未來的規範在以後的版本,2016年的ECMAScript。另一方面,靜態方法已經在ECMAScript中的一部分2015規範,因此支持ECMAScript 2015的瀏覽器已經允許您執行此操作。


預設的特定階段描述here和描述的發展階段有一定的特徵是,

相關問題