2015-04-03 7 views
15

Mit ES6-Syntax ist es möglich, eine Klasse zu erweitern und ihre statischen Methoden zu erben? Und wenn ja, können wir Super in der statischen Methode der Unterklasse nennen?Statische Methoden in ES6 übernehmen

Beispiel:

class Parent { 
    static myMethod(msg) { 
    console.log(msg) 
    } 
} 

class Child extends Parent { 
    static myMethod() { 
    super("hello") 
    } 
} 

Child.myMethod(); // logs "hello" 

Dies gibt mir eine keine Methode Aufruf auf undefinierte Fehler in meinem Transpiler (Reactify).

____SuperProtoOfParent.open.call(this);

+2

Beachten Sie, dass es illegal ist, 'super' außerhalb Bauer zu nennen. Du würdest 'super.myMethod()' hier haben wollen, aber ich weiß nicht, ob 'super' funktionieren soll, funktioniert in statischen Methoden. –

+2

Interessante Frage, aber aus der Sicht der OOP sollten Sie nicht einfach 'Parent.myMethod()' aufrufen, da 'static' keine Instanz impliziert? – CodingIntrigue

Antwort

18

Nach den spec here und heresuper Basis Verweise auf den Prototyp des aktuellen this Objekts. In statischen Methoden wird auf die geerbte Klasse verwiesen. Um also die statische Methode der Eltern aufzurufen, müssen Sie super.myMethod('some message') aufrufen. Hier ein Beispiel:

class Parent { 
    static myMethod(msg) { 
    console.log('static', msg); 
    } 

    myMethod(msg) { 
    console.log('instance', msg); 
    } 
} 

class Child extends Parent { 
    static myMethod(msg) { 
    super.myMethod(msg); 
    } 

    myMethod(msg) { 
    super.myMethod(msg); 
    } 
} 

Child.myMethod(1); // static 1 
var child = new Child(); 

child.myMethod(2); // instance 2 

Here is the es6fiddle