質問: new Dragon(); //インスタンスをつくる console.log(d1); ``` 実行結果が、 ``` ➀▼Dragon {hp:100} ➁ hp:100 ➂ ▼__proto__:Teki ➃ ▶attack:f() ➄ hp:100 6⃣ ▶__proto__:Object ``` 上記のようになります。 現在の私の認識だと、上記プログラムが実行されると、 d1インスタンスはhpプロパティと*proto*プロパティを持つ。 hpプロパティは100、*proto*プロパティはDragon.prototypeオブジェクトを指し示している。 Dragon.prototypeは、hpプロパティ・attackプロパティ・*proto*プロパティを持っている。 hpプロパティは100、attackプロパティは関数、*proto*プロパティはTeki.prototypeオブジェクトを指し示している。 というものなのですが、 (1)上記の認識で間違いないでしょうか? (2)上記の認識に基づいて考えると、➀行目のDragonや➂行目のTekiなどが何を示しているのかよくわかりません。➀、➂行目に限らず結局全体的に何を示しているのかよくわからない状況です。 ➀~6⃣行目まで具体的に何を示しているのでしょうか? (3)結局console.log()でオブジェクトを調べたときに何を示しているのかを知りたいのですが、ドキュメント・書籍など、どこを調べればよいでしょうか? よろしくお願いいたします。
回答: > > ➀~6⃣行目まで具体的に何を示しているのでしょうか? > > > オブジェクト指向の「継承」(Inheritance)です。 > > (3)結局console.log()でオブジェクトを調べたときに何を示しているのかを知りたいのですが、ドキュメント・書籍など、どこを調べればよいでしょうか? > > > 別の言語になりますがJavaのオブジェクト指向を調べればいいと思います。 > > How To Work with Prototypes and Inheritance in JavaScript > > > このプログラムは Dragon.prototype = new Teki; としていますが `d1.__proto__.hp` はなくても構いません。 Dragon.prototype = Object.create(Teki.prototype); としたほうがいいと思います。