2016-08-24 32 views
1

我想使用ES6类的静态类属性(0级),像这样 -ES6等效于以下模式?

class Button { 
    static size = { 
    SMALL: "SMALL", 
    BIG: "BIG" 
    } 
} 

class UILibrary { 
    consturctor() { 
    this.button = new Button(); 
    } 
} 

// I can't access static properties of a class instance :(
const LibraryA = new UILibrary(); 
console.log(LibraryA.button.size.SMALL); 

什么是我们的最佳选择吗?

EDIT

这个问题是不是在其中在阶段0已经支持ES6/7,创建类属性也没有有关创建的静态方法。我只是想找到一个模式,允许将类枚举对象附加到类实例。因此没有重复的问题建议是有效的。

+1

'我不明白为什么' - java和javascript是完全不相关的语言 –

+2

https://esdiscuss.org/topic/define-static-properties-and-prototype-properties-with-the-class-syntax –

+0

@JaromandaX哈哈,这是真的。但是我想从最佳实践的角度来看,是否有这样做的理由。 –

回答

3

我不能访问类的实例:(

是静态性质,如果是静态属性,那么你需要访问它们的构造:

console.log(Button.size.SMALL); 
console.log(LibraryA.button.constructor.size.SMALL); 

(见here讨论的差异)

我只是想找到一个模式t帽子允许将类枚举对象附加到类实例。

如果你想他们是可在的情况下,只是不要让他们static

class Button { 
    // without the experimental syntax, do the assignment in the constructor 
    size = { 
    SMALL: "SMALL", 
    BIG: "BIG" 
    } 
} 

或者,而不是丢弃的static关键字,只是把他们的原型,以便将对象不重建一遍又一遍:

class Button {} 
Button.prototype.size = { 
    SMALL: "SMALL", 
    BIG: "BIG" 
}; 

或者,也许你不应该把他们的枚举的类在所有的,只是使用ES6模块的命名出口。

+0

感谢您的详细解答。原型替代看起来很有趣。它是否有任何性能点击? –

+0

@ user3210476:不,它实际上比第二个sinppet占用更少的内存。原型属性和自身属性之间查找时间的差异很难衡量,并且取决于引擎优化。 – Bergi