Statische Initialisierungsblöcke

Statische Initialisierungsblöcke sind eine ganz neue JavaScript-Funktion, die in ECMAScript 2022 standardisiert wurde und nur in modernen Browsern unterstützt wird. Mit statischen Initialisierungsblöcken können Sie den Wert statischer Felder mithilfe von Logik dynamisch festlegen, die mehrere Anweisungen umfasst.

Verwenden Sie zum Erstellen eines statischen Initialisierungsblocks das Schlüsselwort static, gefolgt von einer Blockanweisung in geschweiften Klammern ({}):

class MyClass {
  static {}
}

Mit diesem Muster können Sie statische Felder initialisieren oder ändern, die im Text der Klasse deklariert sind:

class MyClass {
  static firstProperty = 'First property.';
  static secondProperty;
  static {
    this.secondProperty = 'Second property.';
  }
}

MyClass.secondProperty;
"Second property."

Diese Anweisungen werden bei der ersten Initialisierung einer Klasse ausgewertet, d. h. bei der erstmaligen Auswertung durch die JavaScript-Engine und nicht beim Erstellen der Instanz einer Klasse wie bei constructor():

class MyClass {
    static {
        console.log( "Static initialization block." );
    }
    constructor() {
        console.log( "Constructor." );
    }
}
> "Static initialization block."

const myClassInstance = new MyClass();
> "Constructor."

Eine Klasse kann mehrere statische Initialisierungsblöcke enthalten. Diese Blöcke werden in der Reihenfolge ihrer Deklaration zusammen mit allen anderen statischen Feldern und Methoden ausgewertet. Das bedeutet, dass in diesem Block nur die vor einem statischen Initialisierungsblock deklarierten Felder verfügbar sind:

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."

Wissen testen

Welche der folgenden Aussagen sind wahr?

Statische Initialisierungsblöcke werden ausgewertet, wenn die Klasse zum ersten Mal initialisiert wird.
Eine Klasse darf nur einen statischen Initialisierungsblock enthalten.
Innerhalb des Blocks sind Felder verfügbar, die nach einem statischen Initialisierungsblock deklariert wurden.