javascriptを勉強している際なのですが、以下のコードに関して分からない部分が出てきてしまったため、教えて頂きたいです。
javascript
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="utf-8"> 5 6</head> 7<body> 8<script> 9 10 var Animal = function() {}; 11 12 Animal.prototype = { 13 walk : function() { 14 console.log('トコトコ...'); 15 } 16 }; 17 18 var Dog = function() { 19 20 Animal.call(this); 21 }; 22 23 console.log(this); 24 25 Dog.prototype = new Animal(); 26 27 Dog.prototype.bark = function(){ 28 29 console.log('ワンワン'); 30 } 31 32 var d = new Dog(); 33 d.walk(); 34 d.bark(); 35 36 37 38</script> 39</body> 40 41</html>
教えて頂きたい部分というのは「Animal.call(this);」この部分に関してなのですが、2点お聞きしたいことがございます。
まず、「Animal.call(this);」ここの説明として、「Animalコンストラクターを現在のthisで呼び出しなさい、という意味である。」とあったのですが、現在のthisで呼び出すとは、Animalオブジェクトにプロパティやメソッドが設定されていた場合、グローバルオブジェクトとして呼びだす、といった意味なのでしょうか?
もう一点なのですが、「ここではコンストラクターは空なのでなくても問題はないが、基底クラスでプロパティの定義など、なにかしらの初期化処理を行っている場合には、まず基底クラスのコンストラクターを処理した後、派生クラス独自の初期化処理を記述してください。」との説明があるのですが、クラスを継承する際は、基底クラスのコンストラクターを派生クラス先で処理しなければならない理由は何故なのでしょうか?
多少混乱してしまっている部分があり、うまく説明できていなかったらすみません。
ご解説頂けましたら幸いです。よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー