Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit März 2016 browserübergreifend verfügbar.
Das static Schlüsselwort definiert eine statische Methode oder ein statisches Feld für eine Klasse oder einen statischen Initialisierungsblock (siehe den Link für weitere Informationen zu dieser Verwendung). Statische Eigenschaften können nicht direkt auf Instanzen der Klasse zugegriffen werden. Stattdessen werden sie auf der Klasse selbst aufgerufen.
Statische Methoden sind oft Hilfsfunktionen, wie z.B. Funktionen zum Erstellen oder Klonen von Objekten, während statische Eigenschaften nützlich für Caches, feste Konfigurationen oder andere Daten sind, die nicht über Instanzen hinweg repliziert werden müssen.
Hinweis: Im Kontext von Klassen verwenden die MDN Web Docs-Inhalte die Begriffe Eigenschaften und Felder austauschbar.
Es gibt einige zusätzliche Syntaxbeschränkungen:
Diese Seite führt öffentliche statische Eigenschaften von Klassen ein, die statische Methoden, statische Zugreifer und statische Felder umfassen.
Öffentliche statische Merkmale werden mit dem static Schlüsselwort deklariert. Sie werden während der Klassenauswertung unter Verwendung der [[DefineOwnProperty]] Semantik (welches im Wesentlichen Object.defineProperty() ist) zum Klassenkonstruktor hinzugefügt. Sie werden erneut vom Klassenkonstruktor aus aufgerufen.
Statische Methoden sind oft Hilfsfunktionen, wie z.B. Funktionen zum Erstellen oder Klonen von Instanzen. Öffentliche statische Felder sind nützlich, wenn Sie möchten, dass ein Feld nur einmal pro Klasse existiert und nicht in jeder Klasseninstanz, die Sie erstellen. Dies ist nützlich für Caches, feste Konfigurationen oder andere Daten, die nicht über Instanzen hinweg repliziert werden müssen.
Statische Feldnamen können berechnet werden. Der this Wert im berechneten Ausdruck ist das this der umgebenden Klassendefinition, und das Verweisen auf den Klassennamen führt zu einem ReferenceError, da die Klasse noch nicht initialisiert ist. await und yield funktionieren wie erwartet in diesem Ausdruck.
Statische Felder können einen Initialisierer haben. Statische Felder ohne Initialisierer werden auf undefined gesetzt. Öffentliche statische Felder werden in Unterklassen nicht neu initialisiert, können jedoch über die Prototypenkette aufgerufen werden.
Im Feldinitialisierer bezieht sich this auf die aktuelle Klasse (die Sie auch über ihren Namen aufrufen können), und super bezieht sich auf den Basisklassenkonstruktor.
Der Ausdruck wird synchron ausgewertet. Sie können await oder yield nicht im Initialisiererausdruck verwenden. (Betrachten Sie den Initialisiererausdruck als implizit in eine Funktion eingewickelt.)
Statische Feldinitialisierer und statische Initialisierungsblöcke werden nacheinander ausgewertet. Feldinitialisierer können auf Feldwerte oberhalb von ihnen verweisen, aber nicht unterhalb von ihnen. Alle statischen Methoden werden vorher hinzugefügt und können aufgerufen werden, obwohl das Aufrufen dieser Methoden möglicherweise nicht wie erwartet funktioniert, wenn sie sich auf unterhalb des beim Initialisieren befindlichen Feldes beziehen.
Hinweis: Dies ist bei privaten statischen Feldern wichtiger, da der Zugriff auf ein nicht initialisiertes privates Feld einen TypeError auslöst, selbst wenn das private Feld unterhalb deklariert wird. (Wenn das private Feld nicht deklariert wird, wäre dies ein früher SyntaxError.)
Das folgende Beispiel demonstriert mehrere Dinge:
Um eine statische Methode oder Eigenschaft innerhalb einer anderen statischen Methode derselben Klasse aufzurufen, können Sie das this Schlüsselwort verwenden.
Statische Mitglieder sind nicht direkt zugänglich über das this Schlüsselwort aus nicht-statischen Methoden. Sie müssen sie unter Verwendung des Klassennamens aufrufen: KLASSENNAME.STATISCHE_METHODE() / KLASSENNAME.STATISCHE_EIGENSCHAFT oder durch Aufruf der Methode als Eigenschaft des constructor: this.constructor.STATISCHE_METHODE() / this.constructor.STATISCHE_EIGENSCHAFT
| ECMAScript® 2027 Language Specification # sec-class-definitions |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.