2016-06-09 117 views

回答

3

這不是在構造函數創建一個實例屬性,它是一個靜態(類)屬性,所以沒有。它只會被創建一次 - 當對象文字被聲明時 - 並被分配給類的構造函數。任何類的實例都可以訪問,但不會創建副本。

要爲類的每個實例創建一個對象,你可以進行復印或一個新的對象,並將其分配給一個屬性上this

class Foo { 
    constructor(){ 
    this.modes = { 
     ModeA : 0, 
     ModeB : 1 
    } 
    } 
} 

要爲類創建一個對象,你應該分配給構造函數,就像你現在正在做的那樣。如果你看看Babel的靜態方法輸出,你可以看看它是如何工作的。該ES6代碼:

class Foo { 
    static bar() { } 
    baz() { } 
} 

會產生ES5:分配給構造函數的原型將是實例「的一部分,」

var Foo = function() { 
    function Foo() { 
    _classCallCheck(this, Foo); 
    } 

    Foo.bar = function bar() {}; 

    Foo.prototype.baz = function baz() {}; 

    return Foo; 
}(); 

屬性,而直接分配給構造屬性將成爲團隊的一分子類。

+0

謝謝,這真是太棒了。對於使用'es2015'的靜態函數,這也是如此嗎? (只創建一次) – BarryBones41

+0

@ BarryBones41我添加了一些關於它如何工作的更多信息,其中包括es5輸出以準確顯示它的功能。 – ssube

相關問題