サブクラスで基本クラスのコンストラクターを参照する必要があるのはなぜですか?どちらの方法でも同じ結果が得られるようです。
class Animal {
constructor(age) {
this.age = age;
}
}
class Mammal extends Animal {}
let lion = new Mammal(3);
lion.age //=> 3
とは対照的に
class Mammal extends Animal {
constructor(){
super(3)
}
}
let lion = new Mammal();
lion.age //=> 3
明示的なコンストラクターを指定しない場合、サブクラス1で、JavaScriptエンジンは次のようなコンストラクターを生成します。
constructor(...args) {
super(...args);
}
それがあなたの最初の例で起こっていることです。したがって、この:
class Mammal extends Animal {
}
これと同じです:
class Mammal extends Animal {
constructor(...args) {
super(...args);
}
}
... 2つ目は明示的であるのに対し、1つ目はJavaScriptエンジンによってクラスに挿入されたコンストラクターを使用しているだけです。
これは、§14.5.14のステップ10で定義されています。ランタイムセマンティクス:ClassDefinitionEvaluation:
場合は、コンストラクタは空で、その後、
場合ClassHeritageのoptが存在し、その後、
ましょう、コンストラクタは、ソーステキストを解析した結果であります
constructor(... args){ super (...args);}
目標記号MethodDefinitionで構文文法を使用します。
そうしないと、
ましょう、コンストラクタは、ソーステキストを解析した結果であります
constructor( ){ }
目標記号MethodDefinitionで構文文法を使用します。
1上記のように、サブクラスでない場合は、単にconstructor() { }
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加