Eu quero implementar constantes em a class
, porque é aí que faz sentido localizá-las no código.
Até agora, tenho implementado a seguinte solução alternativa com métodos estáticos:
class MyClass {
static constant1() { return 33; }
static constant2() { return 2; }
// ...
}
Eu sei que há uma possibilidade de mexer com protótipos, mas muitos recomendam isso.
Existe uma maneira melhor de implementar constantes nas classes ES6?
javascript
class
constants
ecmascript-6
Jérôme Verstrynge
fonte
fonte
Respostas:
Aqui estão algumas coisas que você pode fazer:
Exporte um
const
do módulo . Dependendo do seu caso de uso, você pode apenas:E importe isso do módulo sempre que necessário. Ou, desenvolvendo sua ideia de método estático, você pode declarar um
static
acessador get :Dessa forma, você não precisará de parênteses:
Exemplo de Babel REPL
Então, como você diz, como a
class
é apenas um açúcar sintático para uma função, você pode adicionar uma propriedade não gravável da seguinte forma:Pode ser bom se pudéssemos fazer algo como:
Infelizmente, porém, essa sintaxe de propriedade de classe está apenas em uma proposta do ES7 e, mesmo assim, não permitirá a adição
const
à propriedade.fonte
this.defineProperty(this, 'constant1', {...})
Parece funcionar para mim.
fonte
this.MyConst
de dentro de umWhatever
exemplo, você sempre tem que escrevê-lo como este:Whatever.MyConst
Estou usando
babel
e a seguinte sintaxe está funcionando para mim:Por favor, considere que você precisa da predefinição
"stage-0"
.Para instalá-lo:
Atualizar:
atualmente usa
stage-3
fonte
stage-2
Object.freeze()
a classe corrige isso?No presente documento ele afirma:
Isso significa que é intencionalmente assim.
Talvez você possa definir uma variável no construtor?
fonte
Também é possível usar
Object.freeze
em seu objeto de classe (es6) / função construtora (es5) para torná-lo imutável:Tentar alterar a classe resultará em uma falha leve (não causará erros, simplesmente não terá efeito).
fonte
Object.freeze()
impor a imutabilidade e tenho usado muito ultimamente. Só não se esqueça de aplicá-lo recursivamente!Talvez apenas coloque todas as suas constantes em um objeto congelado?
fonte
Como https://stackoverflow.com/users/2784136/rodrigo-botti disse, acho que você está procurando
Object.freeze()
. Aqui está um exemplo de uma classe com estática imutável:fonte
Aqui está mais uma maneira de você fazer
Nota - a ordem é importante, você não pode ter as constantes acima
Uso console.log (Auto.CONSTANT1);
fonte
Você pode criar uma maneira de definir constantes estáticas em uma classe usando um recurso estranho das classes ES6. Como as estáticas são herdadas por suas subclasses, você pode fazer o seguinte:
fonte
Você pode tornar as "constantes" somente leitura (imutáveis) congelando a classe. por exemplo
fonte
Se você se sente à vontade para misturar e combinar sintaxe de função e classe, pode declarar constantes após a classe (as constantes são 'levantadas'). Observe que o Visual Studio Code terá dificuldade para formatar automaticamente a sintaxe mista (embora funcione).
fonte
Eu fiz isso.
O valor do PI está protegido contra alterações, pois é um valor retornado de uma função. Você pode acessá-lo via Circle.PI. Qualquer tentativa de atribuir a ele é simplesmente descartada no chão de maneira semelhante a uma tentativa de atribuir a um caractere de string via [].
fonte
Você pode defini-lo assim:
fonte
Você pode usar
import * as
sintaxe. Embora não sejam uma classe, sãoconst
variáveis reais .Constants.js
index.js
fonte