Les blocs d'initialisation statiques sont une toute nouvelle fonctionnalité JavaScript, standardisée ECMAScript 2022 et uniquement disponible dans navigateurs les plus récents. Les blocs d'initialisation statiques vous permettent de définir la valeur des champs statiques de manière dynamique, en utilisant une logique qui englobe plusieurs instructions.
Pour créer un bloc d'initialisation statique, utilisez le mot clé static
suivi d'un
instruction de bloc dans une ligne bouclée
crochets ({}
):
class MyClass {
static {}
}
Ce modèle vous permet d'initialiser ou de modifier les champs statiques déclarés dans le corps de la classe:
class MyClass {
static firstProperty = 'First property.';
static secondProperty;
static {
this.secondProperty = 'Second property.';
}
}
MyClass.secondProperty;
"Second property."
Ces instructions sont évaluées lors de l'initialisation d'une classe, c'est-à-dire
lorsque le moteur JavaScript l'évalue pour la première fois, et non lorsqu'une instance
est créée, comme pour constructor()
:
class MyClass {
static {
console.log( "Static initialization block." );
}
constructor() {
console.log( "Constructor." );
}
}
> "Static initialization block."
const myClassInstance = new MyClass();
> "Constructor."
Une classe peut contenir plusieurs blocs d'initialisation statiques. Ces blocs sont évalués dans l'ordre dans lequel ils sont déclarés, avec tous les autres champs statiques et méthodes. Cela signifie que seuls les champs déclarés avant une initialisation statique sont disponibles dans ce bloc:
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."
Testez vos connaissances
Parmi les affirmations suivantes, lesquelles sont vraies ?