ES6 эквивалент следующего шаблона?
Я хочу использовать статические свойства класса (stage-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);
Какова лучшая альтернатива для этого?
РЕДАКТИРОВАТЬ:
Этот вопрос не о создании свойств класса в ES6/7, который уже поддерживается на этапе 0, ни о создании статических методов. Я просто ищу шаблон, который позволяет присоединять объекты типа enum к экземплярам классов. Следовательно, ни одно из дублирующих предложений вопросов не является действительным.
1 ответ
Я не могу получить доступ к статическим свойствам экземпляра класса:(
Да, если они являются статическими свойствами, вам нужно получить к ним доступ в конструкторе:
console.log(Button.size.SMALL);
console.log(LibraryA.button.constructor.size.SMALL);
(см. здесь для обсуждения различий)
Я просто ищу шаблон, который позволяет присоединять объекты типа enum к экземплярам классов.
Если вы хотите, чтобы они были доступны в инстансах, просто не делайте их 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.