Existe uma proposta ECMAScript de Estágio 3 chamada "Static Class Features" por Daniel Ehrenberg e Jeff Morrison que visa resolver este problema. Junto com a proposta de "Campos de classe" do Estágio 3 , o código futuro será semelhante a este:
class MyClass {
static myStaticProp = 42;
myProp = 42;
myProp2 = this.myProp;
myBoundFunc = () => { console.log(this.myProp); };
constructor() {
console.log(MyClass.myStaticProp);
console.log(this.myProp);
this.myBoundFunc();
}
}
O acima é equivalente a:
class MyClass {
constructor() {
this.myProp = 42;
this.myProp2 = this.myProp;
this.myBoundFunc = () => { console.log(this.myProp); };
console.log(MyClass.myStaticProp);
console.log(this.myProp);
this.myBoundFunc();
}
}
MyClass.myStaticProp = 42;
O Babel oferece suporte à transpilação de campos de classe por meio de @ babel / plugin-proposal-class-properties (incluído na predefinição do estágio 3 ), para que você possa usar esse recurso mesmo se o tempo de execução do JavaScript não o suportar.
Em comparação com a solução de @kangax de declarar um getter, essa solução também pode ter mais desempenho, já que aqui a propriedade é acessada diretamente em vez de chamar uma função.
Se essa proposta for aceita, será possível escrever o código JavaScript de uma forma mais semelhante às linguagens orientadas a objetos tradicionais, como Java e C♯.
Editar : Uma proposta de campos de classe unificados está agora no estágio 3; atualização para pacotes Babel v7.x.
Editar (fevereiro de 2020) : Os recursos de classe estática foram divididos em uma proposta diferente. Obrigado @ GOTO0!