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 greift man auf die Klasse selbst zu.
Statische Methoden sind oft Hilfsfunktionen, wie Funktionen um Objekte zu erstellen oder zu klonen, während statische Eigenschaften nützlich sind für Caches, feste Konfigurationen oder andere Daten, die nicht über Instanzen hinweg dupliziert werden müssen.
Hinweis: Im Kontext von Klassen verwendet der Inhalt der MDN Web Docs die Begriffe Eigenschaften und Felder austauschbar.
Es gibt einige zusätzliche Syntaxeinschränkungen:
Diese Seite führt öffentliche statische Eigenschaften von Klassen ein, die statische Methoden, statische Zugriffsfunktionen und statische Felder umfassen.
Öffentliche statische Merkmale werden mit dem static Schlüsselwort deklariert. Sie werden zur Zeit der Klassenbewertung mit der [[DefineOwnProperty]] Semantik (die im Wesentlichen Object.defineProperty() ist) zum Klassenkonstruktor hinzugefügt. Sie werden erneut vom Klassenkonstruktor aus aufgerufen.
Statische Methoden sind oft Hilfsfunktionen, wie Funktionen zur Erstellung oder Klonung von Instanzen. Öffentliche statische Felder sind nützlich, wenn Sie möchten, dass ein Feld nur einmal pro Klasse existiert, nicht bei jeder Klasseninstanz, die Sie erstellen. Dies ist nützlich für Caches, feste Konfigurationen oder andere Daten, die nicht über Instanzen hinweg dupliziert werden müssen.
Statische Feldnamen können berechnet werden. Der this Wert im berechneten Ausdruck ist das this, das die Klassendefinition umgibt, und auf den Namen der Klasse zu verweisen ist ein 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 initialisiert. Öffentliche statische Felder werden bei Unterklassen nicht neu initialisiert, können aber über die Prototypenkette aufgerufen werden.
Im Feldinitialisierer bezieht sich this auf die aktuelle Klasse (auf die Sie auch durch ihren Namen zugreifen können), und super bezieht sich auf den Basisklassenkonstruktor.
Der Ausdruck wird synchron ausgewertet. Sie können await oder yield nicht im Initialisiererausdruck verwenden. (Stellen Sie sich den Initialisiererausdruck als implizit in eine Funktion eingekapselt vor.)
Statische Feldinitialisierer und statische Initialisierungsblöcke werden nacheinander ausgewertet. Feldinitialisierer können sich auf Feldwerte darüber, aber nicht darunter beziehen. Alle statischen Methoden werden im Voraus hinzugefügt und können aufgerufen werden, obwohl das Aufrufen möglicherweise nicht wie erwartet funktioniert, wenn sie sich auf Felder beziehen, die unter dem initialisierten liegen.
Hinweis: Dies ist wichtiger bei privaten statischen Feldern, da der Zugriff auf ein nicht initialisiertes privates Feld einen TypeError wirft, selbst wenn das private Feld darunter deklariert ist. (Wenn das private Feld nicht deklariert ist, wäre es ein früher SyntaxError.)
Das folgende Beispiel demonstriert mehrere Dinge:
Um innerhalb einer anderen statischen Methode derselben Klasse eine statische Methode oder Eigenschaft aufzurufen, können Sie das this Schlüsselwort verwenden.
Statische Mitglieder sind nicht direkt mit dem this Schlüsselwort aus nicht-statischen Methoden zugänglich. Sie müssen sie mit dem Klassennamen aufrufen: CLASSNAME.STATIC_METHOD_NAME() / CLASSNAME.STATIC_PROPERTY_NAME oder indem Sie die Methode als Eigenschaft des Konstruktors aufrufen: this.constructor.STATIC_METHOD_NAME() / this.constructor.STATIC_PROPERTY_NAME
| ECMAScript® 2027 Language Specification # sec-class-definitions |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.