は、JSのECMAScript 6に継承されたコンストラクタですか?
そうでもない、ありません。しかし、コンストラクタをまったく提供しなければ、JavaScriptエンジンは継承されたコンストラクタのように動作するデフォルトを提供します。このような(あなたの例に関連していない、あなたは
Dog
でコンストラクタを提供してきました。)
ウィル犬のクラスを見て?
いいえ。コンストラクタをに定義しているため、JavaScriptエンジンは何も行いません。それはDog
のコンストラクタをし、それがSomething
呼び出す必要があり "の定義super
経由秒(そして、あなたがsuper
を呼び出すまで、あなたがthis
を使用することはできません)するのはあなた次第です。
あなたDog
コンストラクタはx
とy
を受け入れるか、独自のをハードコーディング(または、それが得るん引数からそれらを導く)のいずれかに必要があるでしょう:
は彼らを受け入れ:
class Dog extends Something{
constructor(name, x, y) {
super(x, y);
this.name = name;
}
//...
}
ハードコーディング:
// Accepting them:
class Dog extends Something{
constructor(name) {
super(42, 57);
this.name = name;
}
//...
}
(もちろん、x
またはy
のみを受け入れますそして打ち/他のものを導き出す。)
あなたはadds one for you、全くJavaScriptエンジンをconstructor
を指定しない場合。基底クラスの場合
が、それは次のようになります。派生クラスの
constructor() {
}
、それは次のようになります。
constructor(...args) {
super(...args);
}
私はそれが少し継承されたようなものだと言う理由後者の方であることデフォルトのコンストラクタが引数を受け付けず、引数なしでsuper
を呼び出すJavaやC#のような言語とは異なり、JavaScriptのデフォルトは受け取るすべての引数を渡します。
あなたは明示的に ''スーパー(x、y)のような犬のコンストラクタでsuper'を使用して、それを作成する必要があります; ' – Andrey
あなたはこのコードを試してみましたか? 'super'を抜けたので例外がスローされます。 – loganfsmyth