Blocchi di inizializzazione statici

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?

Campi dichiarati dopo la disponibilità di un blocco di inizializzazione statico all'interno del blocco.
Una classe può contenere un solo blocco di inizializzazione statico.
I blocchi di inizializzazione statici vengono valutati quando la classe inizialmente inizializzato.