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 Applikationen statische Methoden für Hilffunktionen 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 andere Methoden

Statische Methoden sind mit dem this Schlüsselwort nicht direkt erreichbar. Man sie mit dem Klassennamen gefolgt von einem Punkt und dem Methodennamen aufrufen: KLASSENNAME.STATISCH_MEHTODE_NAME (wie Aufrufe von außerhalb der Klasse) oder mit der constructor Eigenschaft: this.constructor.STATISCH_MEHTODE_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 Konzepte. Es zeigt wie eine statische Methode in einer Klasse implementiert wird und auch wie eine Klasse mit einer statischen Methode vererbt werden kann. Letztlich wird gezeigt wie man eine statsiche Methode aufrufen kann und wie nicht .

class Verdreifacher {
  static verdreifache(n) {
    n = n || 1; // ist keine bitweise Operation 
    return n * 3;
  }
}

class GrosserVerdreifacher extends Verdreifacher {
  static verdreifache(n) {
    return super.verdreifache(n) * super.verdreifache(n);
  }
}

console.log(Verdreifacher.verdreifache());         // 3
console.log(Verdreifacher.verdreifache(6));        // 18
console.log(GrosserVerdreifacher.verdreifache(3)); // 81
var vdf = new Verdreifacher();
console.log(GrosserVerdreifacher.verdreifache(3)); // 81 (ein Instanzierung der Eltern-Klasse hat keinen Einfluss)
console.log(vdf.verdreifache());                   // 'vdf.verdreifache 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 2017 Draft (ECMA-262)
Die Definition von 'Class definitions' in dieser Spezifikation.
Entwurf  

Browserkompatibilität

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support 42.0 45 (45) ? ? ?
Feature Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Chrome for Android
Basic support Nicht unterstützt 45.0 (45) ? ? ? 42.0

Siehe auch

Schlagwörter des Dokuments und Mitwirkende

Schlagwörter: 
 Mitwirkende an dieser Seite: schlagi123, akumagamo
 Zuletzt aktualisiert von: schlagi123,