Statische Initialisierungsblöcke sind eine sehr neue JavaScript-Funktion, ECMAScript 2022 unterstützt. modernen Browsern. Mit statischen Initialisierungsblöcken können Sie den Wert statischer Felder dynamisch festlegen. mit einer Logik, die mehrere Anweisungen umfasst.
Um einen statischen Initialisierungsblock zu erstellen, verwenden Sie das Schlüsselwort static
gefolgt von einem
block-Anweisung in geschweifter Form
Klammern ({}
):
class MyClass {
static {}
}
Mit diesem Muster können Sie statische Felder, die im Textkörper von deklariert sind, initialisieren oder ändern. der Klasse:
class MyClass {
static firstProperty = 'First property.';
static secondProperty;
static {
this.secondProperty = 'Second property.';
}
}
MyClass.secondProperty;
"Second property."
Diese Anweisungen werden zum Zeitpunkt der Initialisierung einer Klasse ausgewertet,
wenn die JavaScript-Engine ihn zum ersten Mal auswertet, und nicht, wenn eine Instanz eines
-Klasse erstellt wird, 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 deklarierten Reihenfolge ausgewertet, zusammen mit allen anderen statischen Feldern . Das bedeutet, dass nur die Felder, die vor einer statischen Initialisierung deklariert wurden, Block sind in diesem Block verfügbar:
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?