2016-02-17 83 views
0

所以我已經閱讀了各種計算器。在ES6中這是無效的:ES6類屬性定義

class MyClass { 
    myProperty = ""; 

    constructor() { 
     this.myProperty = "Hey"; 
    } 
} 

但它在ES7中有效。

然而,這是有效的:

class MyClass { 
    setViewModel(viewModel) { 
     this.internalViewModel = viewModel; 
    } 

    get viewModel() { return this.internalViewModel } 
} 

在這裏,直到我實際上設置還沒有定義internalViewModel。我希望如果您在致電myClass.viewModel之前尚未撥打myClass.setViewModel(something),則會從myClass.viewModel返回undefined

這是正確的嗎?

如果你有這個ES7類,你試圖訪問myProperty像這樣myClass.myProperty你會得到預期的"Hey"或不?

+1

其實它在ES7中也是無效的,但在ES8中可能會有效。 – Bergi

+0

類屬性不是ES7的一部分。 –

+0

[建議](https://github.com/jeffmo/es-class-fields-and-static-properties)實際上是[階段0提案](https://tc39.github.io/process-document /)。 – towerofnix

回答

2

這個ES6是否正確?

是的。

儘管在構造函數中不創建所有屬性可能被認爲是不好的做法。

如果你有這樣的ES7類和您試圖訪問myProperty像這樣myClass.myProperty,你會得到預期的"Hey"與否?

是的,但請注意,myProperty不是一個類,而是一個實例屬性。

var myClass = new MyClass; 
myClass.myProperty; // "Hey" 

此外,在初始化器實例字段聲明完全是多餘的,無論如何,因爲它覆蓋馬上通過近等效this.myProperty = "Hey";