2016-05-05 10 views
-1

私は奇妙に思えたa tutorialの "super"の使い方に出くわしました。 super()は、サブクラスのget()メソッド内で使用され、アクセサー表記を使用せずにスーパークラスのメソッドget()を呼び出します。それは働くだろうか?はいの場合は、どこで参考文献を見つけることができますか?サブクラスのメソッド内で "super"を使用して直接参照せずにスーパークラスの対応するメソッドを呼び出すことはできますか?

編集:コードを入力するため@FlexiKlingと@sorenymous

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(); 

感謝:)

+3

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(); 

コンソール出力。あなたの質問をそれに含めるには[編集]してください。また、そのソースであるチュートリアルをリンクしてください。 – Bergi

+0

@Bergi、それは多くのタイピングです:/ – Thoran

+1

あなたはまだそれを行う必要はありません。元のソースからコピー&ペーストできるテキストのスクリーンショットではありませんか? – Bergi

答えて

1

で、今は違法です構文エラーです。あなたの代わりにそれの画像へのリンクの実際のコードを投稿することができればそれが役立つだろう

Uncaught SyntaxError: 'super' keyword unexpected here

4

いいえ、直接superコール(プロパティなしでは)唯一のコンストラクタで許可され、どこでも構文エラーを構成していますelse。それはsuper.get()である必要があります。

あなたが参照しているチュートリアルは2013年からのものです。クラス構文提案の以前のバージョンでは、このフォームは確かに可能でした。しかし、それはDraft Rev 28 (October 14, 2014)で削除されました。すぐに次のプロパティ指定なし

スーパーは、私はあなたのコードをテストし、それが生成されたすべてのMethodDefinition(現在のメソッド名を使用していない以上、暗黙的なスーパー)

+0

あなたの素早い答えをありがとう、私は答えを知らないので、あなたが参照を提供することができない限り、私はあなたを受け入れることができません。 – Thoran

+1

さて、ES6準拠の環境で試してみると、[the docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/super)をチェックするか、 [spec](http://www.ecma-international.org/ecma-262/6.0/#sec-class-definitions-static-semantics-early-errors)を見てください:-) – Bergi

+0

あなたは気にしないでください私の追加!あなたがそれが好きではない場合は削除してください:)(そしてその場合はごめんなさい!) –

関連する問題