Os blocos de inicialização estáticos são um recurso JavaScript muito novo, padronizados em ECMAScript 2022 e compatível apenas com navegadores modernos. Os blocos de inicialização estática permitem definir o valor dos campos estáticos de maneira dinâmica. usando uma lógica que abrange várias instruções.
Para criar um bloco de inicialização estático, use a palavra-chave static
seguida de
Instrução de bloco com chaves
colchetes ({}
):
class MyClass {
static {}
}
Esse padrão permite inicializar ou alterar os campos estáticos declarados no corpo do a classe:
class MyClass {
static firstProperty = 'First property.';
static secondProperty;
static {
this.secondProperty = 'Second property.';
}
}
MyClass.secondProperty;
"Second property."
Essas instruções são avaliadas quando uma classe é inicializada pela primeira vez, que
é quando o mecanismo JavaScript o avalia pela primeira vez, não quando uma instância de um
classe é criada, assim como com constructor()
:
class MyClass {
static {
console.log( "Static initialization block." );
}
constructor() {
console.log( "Constructor." );
}
}
> "Static initialization block."
const myClassInstance = new MyClass();
> "Constructor."
Uma classe pode conter vários blocos de inicialização estáticos, que são são avaliadas na ordem em que foram declaradas, junto com outros campos estáticos métodos. Isso significa que somente os campos declarados antes de uma inicialização estática estão disponíveis nele:
class MyClass {
static myNewField;
static {
this.myNewField = this.myField;
}
static myField = "My value.";
};
MyClass.myNewField;
> undefined
class MyCorrectedClass {
static myNewField;
static myField = "My value.";
static {
this.myNewField = this.myField;
}
};
MyCorrectedClass.myNewField;
> "My value."
Teste seu conhecimento
Quais das seguintes afirmações são verdadeiras?