に延びる以下スーパークラスとサブクラスを検討:ES6矢印機能トリガ「『スーパー』外部関数又はクラスの」エラー
class SuperClass {
constructor(name){
this.name = name;
}
sayName =() => {
alert(this.name);
}
}
class SubClass extends SuperClass {
constructor(name){
super(name);
}
sayName =() => {
super.sayName();
document.getElementsByTagName('body')[0].innerHTML = this.name;
}
}
let B = new SubClass('Noam Chomsky');
B.sayName();
この例では関数sayName
が両方の矢印の関数として書かれていますクラス定義。私が言って、私はエラーを取得B.sayName()
を呼び出すときに:
'super' outside of function or class
JSFiddle demonstrating the error(コンソールをチェックしてください)
しかし、私は場合、クラス定義は、矢印の機能を使用しないように、再書き込み、すべてが正常に動作します
class SuperClass {
constructor(name){
this.name = name;
}
sayName() {
alert(this.name);
}
}
class SubClass extends SuperClass {
constructor(name){
super(name);
}
sayName() {
super.sayName();
document.getElementsByTagName('body')[0].innerHTML = this.name;
}
}
let B = new SubClass('Noam Chomsky');
B.sayName();
JSFiddle demonstrating that it works fine
:と私はエラーを取得しません10ここで矢印機能を使用すると、なぜこのエラーが発生するのか説明できますか?
あなたが最初の場所で、矢印関数として 'sayName'を定義したいなぜ? 'sayName =()=> { アラート(this.name); } '構文はまだ標準化されていません(現在2段階目です)。 –
jsfiddleが使用しているBabelのバージョンに問題がある可能性があります。答えの一つとして、 'SuperClass.prototype'に' sayName'メソッドがないので、 'super.sayName()'を呼び出すことはできません。 **しかし、**、SubClassの 'sayName'メソッドの中の' super'を参照すると動作するはずです。結局のところ、コードは次のようになります( 'SuperClass'で' sayName'を適切なメソッドにしたことに注意してください):https://jsfiddle.net/5y9bqwd0/ –
そして、ここでは子矢印関数のプロパティの別のオプションがあります:https: //jsfiddle.net/zoeh5bp2/。それらのボットはコンストラクタから 'super'を閉じることです。 – dhilt