2016-05-05 3 views
-1

Ich stieß auf eine Verwendung von "Super" in a tutorial, die seltsam erschien. super() wird innerhalb der Methode get() der Unterklasse verwendet, um die Methode get() der Oberklasse aufzurufen, ohne irgendwelche Accessor-Notationen zu verwenden. Funktioniert das? Wenn ja, wo finde ich weitere Hinweise?Könnte "super" innerhalb einer Methode der Unterklasse verwendet werden, um die entsprechende Methode der Superklasse ohne direkte Referenzierung aufzurufen?

Edit:

class Answer { 
    constructor(value) { 
    this._val = value; 
    } 
    get() { 
    return this._val; 
    } 
} 

class FirmAnswer extends Answer { 
    constructor(value) { 
    super(value); 
    } 

    get() { 
    return super() + '!!'; 
    } 
} 
var luckyAnswer = new FirmAnswer(7); 
luckyAnswer.get(); 

Dank @FlexiKling und @sorenymous den Code für die Eingabe :)

+3

Es würde helfen, wenn Sie den eigentlichen Code auf ein Bild von ihm anstelle eines Link posten könnte. Bitte [bearbeiten] Sie Ihre Frage, um sie einzuschließen. Verknüpfen Sie auch das Tutorial, das die Quelle davon ist. – Bergi

+0

@Bergi, Es ist eine Menge tippen:/ – Thoran

+1

Egal, Sie sollten es immer noch tun. Und ist das nicht ein Screenshot von Text, der aus der Originalquelle kopiert und eingefügt werden kann? – Bergi

Antwort

1

ich Ihren Code getestet und es produziert ein Syntaxfehler

class Answer { 
    constructor(value) { 
    this._val = value; 
    } 
    get() { 
    return this._val; 
    } 
} 

class FirmAnswer extends Answer { 
    constructor(value) { 
    super(value); 
    } 

    get() { 
    return super() + '!!'; 
    } 
} 
var luckyAnswer = new FirmAnswer(7); 
luckyAnswer.get(); 

Konsolenausgabe:

Uncaught SyntaxError: 'super' keyword unexpected here

4

Nein, direkte super Anrufe (ohne Immobilien) in Konstrukteuren nur erlaubt, und stellen überall Syntaxfehler sonst. Es muss super.get() sein.

Das Tutorial, auf das Sie verweisen, stammt aus dem Jahr 2013. In den früheren Versionen des Klassensyntaxvorschlags war dieses Formular tatsächlich möglich. Es wurde jedoch in Draft Rev 28 (October 14, 2014) entfernt:

Super ohne unmittelbar folgende Eigenschaft Spezifizierer ist jetzt illegal in allen MethodDefinition (nicht mehr implizite Super aktuelle Methode Namen)

+0

Danke für Ihre schnelle Antwort, da ich die Antwort nicht kenne, kann ich Ihre nicht akzeptieren, es sei denn, Sie könnten eine Referenz bereitstellen. – Thoran

+1

Nun, Sie könnten es in einer ES6-konformen Umgebung ausprobieren, überprüfen Sie [die Dokumente] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/super) oder haben Sie eine schauen Sie in [die Spezifikation] (http://www.ecma-international.org/ecma-262/6.0/#sec-class-definitions-static-semantics-early-errors) :-) – Bergi

+0

Hoffe, dass es Ihnen nichts ausmacht meine Ergänzungen! Bitte entfernen oder ändern Sie es, wenn Sie es nicht mögen :) (und es tut mir leid in diesem Fall!) –

Verwandte Themen