質問: javascriptを勉強している際なのですが、以下のコードに関して分からない部分が出てきてしまったため、教えて頂きたいです。 ``` ``` 教えて頂きたい部分というのは「Animal.call(this);」この部分に関してなのですが、2点お聞きしたいことがございます。 まず、「Animal.call(this);」ここの説明として、「Animalコンストラクターを現在のthisで呼び出しなさい、という意味である。」とあったのですが、現在のthisで呼び出すとは、Animalオブジェクトにプロパティやメソッドが設定されていた場合、グローバルオブジェクトとして呼びだす、といった意味なのでしょうか? もう一点なのですが、「ここではコンストラクターは空なのでなくても問題はないが、基底クラスでプロパティの定義など、なにかしらの初期化処理を行っている場合には、まず基底クラスのコンストラクターを処理した後、派生クラス独自の初期化処理を記述してください。」との説明があるのですが、クラスを継承する際は、基底クラスのコンストラクターを派生クラス先で処理しなければならない理由は何故なのでしょうか? 多少混乱してしまっている部分があり、うまく説明できていなかったらすみません。 ご解説頂けましたら幸いです。よろしくお願いします。
回答: 本題ではありませんが、いまのブラウザでは`class`として、継承構造をラッピングすることもできるようになっています(IE11など古いブラウザで動かす場合には`babel`などで変換が必要です)。 ``` class Animal{ constructor(name){ this.name = name; } walk() { console.log('トコトコ...'); } } class Dog extends Animal{ bark(){ console.log('ワンワン'); } } ``` この場合、`Dog`の側にコンストラクタがないように見えますが、同じ引数を親に渡すコンストラクタがあるものとして扱われます。