2017-04-03 14 views
0

次のコード拡張プロトタイプ、継承、及びスーパー

const A = class { 
    constructor(...args) { 
     A.prototype.constructor.apply(this, args); 
    } 
}; 

A.prototype.constructor = function(name) { 
    this.name = name; 
}; 

A.prototype.print = function() { 
    console.log(this.name); 
}; 


const B = class extends A {}; 

B.prototype.print = function() { 
    super.print(); 
    console.log('In B!'); 
}; 

B.prototype.printsuper.print()の線は'super' keyword unexpected hereの構文エラーをスローを検討します。どうして?

他の言語のようにスーパークラスを呼び出すことができないのはなぜですか?これを行う正しい方法は何ですか? JavaScriptで

答えて

1

、基底クラスの実装を呼び出すために、あなたはすなわち、名前によって明示的に呼び出す:

B.prototype.print = function() { 
    A.prototype.print.call(this); 
    console.log('In B!'); 
}; 
+0

本当の恥です。このようなプロトタイプを拡張する際に「スーパー」サポートがない理由はありますか? – Spedwards

+0

これは最終的に、クラスがJavaScriptに移植されたときの設計上の決定でした。もちろん、他の言語にもこの概念がありますが、別のキーワード(C#の 'base'など)を使用していることに注意してください。 –

関連する問題