Existe una propuesta de ECMAScript de etapa 3 llamada "Características de clase estática" de Daniel Ehrenberg y Jeff Morrison que tiene como objetivo resolver este problema. Junto con la propuesta de "Campos de clase" de la etapa 3 , el código futuro se verá así:
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();
}
}
Lo anterior es 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;
Babel admite la transpiración de campos de clase a través de @ babel / plugin-proposition-class-properties (incluido en el ajuste preestablecido de la etapa 3 ), de modo que puede usar esta función incluso si su tiempo de ejecución de JavaScript no la admite.
En comparación con la solución de @ kangax de declarar un getter, esta solución también puede ser más eficaz, ya que aquí se accede a la propiedad directamente en lugar de llamar a una función.
Si se acepta esta propuesta, entonces será posible escribir código JavaScript de una manera más similar a los lenguajes tradicionales orientados a objetos como Java y C♯.
Editar : una propuesta de campos de clase unificada se encuentra ahora en la etapa 3; actualice a los paquetes de Babel v7.x.
Editar (febrero de 2020) : las características de la clase estática se han dividido en una propuesta diferente. ¡Gracias @ GOTO0!