Quiero implementar constantes en un class
, porque ahí es donde tiene sentido ubicarlas en el código.
Hasta ahora, he estado implementando la siguiente solución con métodos estáticos:
class MyClass {
static constant1() { return 33; }
static constant2() { return 2; }
// ...
}
Sé que existe la posibilidad de jugar con los prototipos, pero muchos recomiendan no hacerlo.
¿Hay una mejor manera de implementar constantes en las clases de ES6?
javascript
class
constants
ecmascript-6
Jérôme Verstrynge
fuente
fuente
Respuestas:
Aquí hay algunas cosas que puedes hacer:
Exportar a
const
desde el módulo . Dependiendo de su caso de uso, podría simplemente:E importe eso desde el módulo cuando sea necesario. O, basándose en su idea del método estático, puede declarar un
static
get accessor :De esa manera, no necesitará paréntesis:
Ejemplo REPL de Babel
Luego, como usted dice, dado que a
class
es solo azúcar sintáctico para una función, puede agregar una propiedad no escribible de esta manera:Puede ser bueno si pudiéramos hacer algo como:
Pero desafortunadamente, esta sintaxis de propiedad de clase solo está en una propuesta de ES7, e incluso entonces no permitirá agregarla
const
a la propiedad.fuente
this.defineProperty(this, 'constant1', {...})
Parece funcionar para mi.
fuente
this.MyConst
desde unaWhatever
instancia, siempre se debe escribir así:Whatever.MyConst
Estoy usando
babel
y la siguiente sintaxis está funcionando para mí:Tenga en cuenta que necesita el preajuste
"stage-0"
.Para instalarlo:
Actualizar:
uso actual
stage-3
fuente
stage-2
Object.freeze()
a la clase solucionaría eso?En este documento dice:
Esto significa que es intencionalmente así.
¿Quizás puedas definir una variable en el constructor?
fuente
También es posible usar
Object.freeze
en su objeto de clase (es6) / función de constructor (es5) para hacerlo inmutable:Intentar alterar la clase te dará una falla suave (no arrojará ningún error, simplemente no tendrá ningún efecto).
fuente
Object.freeze()
forzar la inmutabilidad, y la he estado usando mucho últimamente. ¡Solo no olvides aplicarlo recursivamente!¿Quizás solo ponga todas sus constantes en un objeto congelado?
fuente
Como dijo https://stackoverflow.com/users/2784136/rodrigo-botti , creo que estás buscando
Object.freeze()
. Aquí hay un ejemplo de una clase con estática inmutable:fuente
Aquí hay una manera más que puedes hacer
Nota: el orden es importante, no puede tener las constantes anteriores
Uso console.log (Auto.CONSTANT1);
fuente
Puede crear una forma de definir constantes estáticas en una clase utilizando una característica extraña de las clases ES6. Dado que las subclases heredan las estadísticas, puede hacer lo siguiente:
fuente
Puede hacer que las "constantes" sean de solo lectura (inmutables) congelando la clase. p.ej
fuente
Si se siente cómodo mezclando y haciendo coincidir la función y la sintaxis de clase, puede declarar constantes después de la clase (las constantes se 'levantan'). Tenga en cuenta que Visual Studio Code tendrá dificultades para formatear automáticamente la sintaxis mixta (aunque funciona).
fuente
Hice esto.
El valor de PI está protegido contra cambios ya que es un valor que se devuelve desde una función. Puede acceder a través de Circle.PI. Cualquier intento de asignarlo simplemente se deja caer al suelo de una manera similar a un intento de asignar un carácter de cadena a través de [].
fuente
Puedes definirlo así:
fuente
Podrías usar la
import * as
sintaxis. Aunque no es una clase, sonconst
variables reales .Constantes.js
index.js
fuente