I blocchi di inizializzazione statici sono una funzionalità JavaScript nuovissima, standardizzata in ECMAScript 2022 e supportato solo in moderni. I blocchi di inizializzazione statici consentono di impostare dinamicamente il valore dei campi statici, utilizzando una logica su più istruzioni.
Per creare un blocco di inizializzazione statico, utilizza la parola chiave static
seguita da un
istruzione di blocco in corsia
parentesi quadre ({}
):
class MyClass {
static {}
}
Questo pattern consente di inizializzare o modificare i campi statici dichiarati nel corpo la classe:
class MyClass {
static firstProperty = 'First property.';
static secondProperty;
static {
this.secondProperty = 'Second property.';
}
}
MyClass.secondProperty;
"Second property."
Queste istruzioni vengono valutate nel momento in cui una classe viene inizializzata per la prima volta, in modo da
è che il motore JavaScript la valuta per la prima volta, non quando viene eseguita un'istanza di un
viene creato, come per constructor()
:
class MyClass {
static {
console.log( "Static initialization block." );
}
constructor() {
console.log( "Constructor." );
}
}
> "Static initialization block."
const myClassInstance = new MyClass();
> "Constructor."
Una classe può contenere più blocchi di inizializzazione statici, che vengono valutati nell'ordine in cui sono dichiarati, insieme a qualsiasi altro campo statico di machine learning. Ciò significa che solo i campi dichiarati prima di un'inizializzazione statica sono disponibili in quel blocco:
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."
Verifica le tue conoscenze
Quali delle seguenti affermazioni sono vere?