Statische Methoden

Das static Schüsselwort definiert statische Methoden für eine Klasse.

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:

  1. Wie eine statische Methode in einer Klasse implementiert wird.
  2. Das von einer Klasse mit statischen Eigenschaften geerbt werden kann.
  3. 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 (ECMA-262)
Die Definition von 'Class definitions' in dieser Spezifikation.
Lebender Standard  

Browserkompatibilität

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid WebviewChrome für AndroidFirefox für AndroidOpera für AndroidSafari auf iOSSamsung InternetNode.js
staticChrome Vollständige Unterstützung 49
Vollständige Unterstützung 49
Keine Unterstützung 42 — 49
Hinweise
Hinweise Strict mode is required.
Keine Unterstützung 42 — 49
Deaktiviert
Deaktiviert From version 42 until version 49 (exclusive): this feature is behind the Experimental JavaScript preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge Vollständige Unterstützung 13Firefox Vollständige Unterstützung 45IE Keine Unterstützung NeinOpera Vollständige Unterstützung 36
Vollständige Unterstützung 36
Keine Unterstützung 29 — 36
Hinweise
Hinweise Strict mode is required.
Keine Unterstützung 29 — 36
Deaktiviert
Deaktiviert From version 29 until version 36 (exclusive): this feature is behind the Experimental JavaScript preference (needs to be set to Enabled).
Safari Vollständige Unterstützung 9WebView Android Vollständige Unterstützung 49
Vollständige Unterstützung 49
Keine Unterstützung 42 — 49
Hinweise
Hinweise Strict mode is required.
Chrome Android Vollständige Unterstützung 49
Vollständige Unterstützung 49
Keine Unterstützung 42 — 49
Hinweise
Hinweise Strict mode is required.
Keine Unterstützung 42 — 49
Deaktiviert
Deaktiviert From version 42 until version 49 (exclusive): this feature is behind the Experimental JavaScript preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Firefox Android Vollständige Unterstützung 45Opera Android Vollständige Unterstützung 36
Vollständige Unterstützung 36
Keine Unterstützung 29 — 36
Hinweise
Hinweise Strict mode is required.
Keine Unterstützung 29 — 36
Deaktiviert
Deaktiviert From version 29 until version 36 (exclusive): this feature is behind the Experimental JavaScript preference (needs to be set to Enabled).
Safari iOS Vollständige Unterstützung 9Samsung Internet Android Vollständige Unterstützung 5.0
Vollständige Unterstützung 5.0
Keine Unterstützung 4.0 — 5.0
Hinweise
Hinweise Strict mode is required.
nodejs Vollständige Unterstützung 6.0.0
Vollständige Unterstützung 6.0.0
Vollständige Unterstützung 4.0.0
Deaktiviert
Deaktiviert From version 4.0.0: this feature is behind the --use_strict runtime flag.
Vollständige Unterstützung 5.0.0
Deaktiviert
Deaktiviert From version 5.0.0: this feature is behind the --harmony runtime flag.

Legende

Vollständige Unterstützung  
Vollständige Unterstützung
Keine Unterstützung  
Keine Unterstützung
Siehe Implementierungshinweise.
Siehe Implementierungshinweise.
Benutzer muss dieses Feature explizit aktivieren.
Benutzer muss dieses Feature explizit aktivieren.

Siehe auch