Das static Schüsselwort definiert statische Methoden für eine Klasse.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Syntax
static methodenName() { ... }
Beschreibung
Statische Methoden werden ohne Instanzierung einer Klasse aufgerufen und sind über eine erzeugte Instanz nicht aufrufbar. Oft werden in statische Methoden für Hilfsfunktionen verwendet.
Aufruf von statischen Methoden
Von einer anderen statischen Methode
Um eine statische Methode aus einer anderen statischen Methode der gleichen Klasse aufzurufen, kann das this Schlüsselwort verwendet werden.
class StaticMethodCall {
static staticMethod() {
return 'Static method has been called';
}
static anotherStaticMethod() {
return this.staticMethod() + ' from another static method';
}
}
StaticMethodCall.staticMethod();
// 'Static method has been called'
StaticMethodCall.anotherStaticMethod();
// 'Static method has been called from another static method'
Für Klassenkonstruktoren und anderen Methoden
Statische Methoden sind mit dem this Schlüsselwort nicht direkt erreichbar von nicht statischen Methoden. Man kann sie mit dem Klassennamen aufrufen: KLASSENNAME.STATISCH_METHODE_NAME oder mit der Aufrufen einer Eigenschaft von constructor: this.constructor.STATISCH_METHODE_NAME.
class StaticMethodCall{
constructor(){
console.log(StaticMethodCall.staticMethod());
// 'static method has been called'
console.log(this.constructor.staticMethod());
// 'static method has been called'
}
static staticMethod(){
return 'static method has been called.';
}
}
Beispiele
Das folgende Beispiel demonstriert mehrere Dinge:
- Wie eine statische Methode in einer Klasse implementiert wird.
- Das von einer Klasse mit statischen Eigenschaften geerbt werden kann.
- Wie eine statische Methode aufgerufen werden kann und wie nicht.
class Triple {
static triple(n) {
if (n === undefined) {
n = 1;
}
return n * 3;
}
}
class BiggerTriple extends Triple {
static triple(n) {
return super.triple(n) * super.triple(n);
}
}
console.log(Triple.triple()); // 3
console.log(Triple.triple(6)); // 18
var tp = new Triple();
console.log(BiggerTriple.triple(3));
// 81 (not affected by parent's instantiation)
console.log(tp.triple());
// 'tp.triple is not a function'.
Spezifikationen
| Spezifikation | Status | Kommentar |
|---|---|---|
| ECMAScript 2015 (6th Edition, ECMA-262) Die Definition von 'Class definitions' in dieser Spezifikation. |
Standard | Initiale Definition. |
| ECMAScript Latest Draft (ECMA-262) Die Definition von 'Class definitions' in dieser Spezifikation. |
Entwurf |
Browserkompatibilität
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
static | Chrome
Vollständige Unterstützung
49
| Edge Vollständige Unterstützung 13 | Firefox Vollständige Unterstützung 45 | IE Keine Unterstützung Nein | Opera Vollständige Unterstützung 36 | Safari Vollständige Unterstützung 9 | WebView Android
Vollständige Unterstützung
49
| Chrome Android
Vollständige Unterstützung
49
| Firefox Android Vollständige Unterstützung 45 | Opera Android ? | Safari iOS Vollständige Unterstützung 9 | Samsung Internet Android Vollständige Unterstützung Ja | nodejs
Vollständige Unterstützung
6.0.0
|
Legende
- Vollständige Unterstützung
- Vollständige Unterstützung
- Keine Unterstützung
- Keine Unterstützung
- Kompatibilität unbekannt
- Kompatibilität unbekannt
- Siehe Implementierungshinweise.
- Siehe Implementierungshinweise.
- Benutzer muss dieses Feature explizit aktivieren.
- Benutzer muss dieses Feature explizit aktivieren.