質問: new Dog("jack",5,"プードル"); dog.info(); ```
回答: > > 理由が分かりません。 > > > それはね、あなたがMDNでsuperに関して調べてないからよ。 super - MDN - Mozilla ITエンジニアとして成長したければリファレンスを読めという有り難い言葉があります。 しかし、JavaScriptはECMAScriptとして公開されている仕様がありますが、 これ読んでもちっとも頭に入ってこないんですよね。 ですがFirefox作っているMozillaという団体が作っているMDNというサイトが救世主なのです。 めっちゃ詳しい&正確なので、リファレンス代わりに目を通す癖を付けておくと良いです。 > > コンストラクター内で使用する場合、super キーワードを単独で置き、this キーワードが使われる前に使用しなくてはなりません。このキーワードは、親オブジェクトの関数を呼び出すためにも使用できます。 > > > つまり、`super()`と単独で使えるのはコンストラクター内だけです。 ちゃんと書いてありますね。 > > 構文 > > > > ``` > super([arguments]); // 親コンストラクターを呼び出します。 > super.functionOnParent([arguments]); > ``` > > 今回infoで使っているのは下の構文が適切でしょう。 `super()`だとコンストラクタメソッド発火になってしまうので、 `super.info()`で実行してみてはどうですか? ちらっと質問文のコードをデベロッパーツールのコンソールに貼り付けて、 `super`を`super.info`に書き換えただけで思ったような動作になりました。 やはりMDNというサイトは偉大でした。 JavaScriptの仕様部分で分からない事があったら目を通すだけの価値はあります。 Googleで「super mdn」みたいなワードで調べたら一番上に出てきますので、調べたい内容+MDNをつけるという小ネタは覚えておいてくださいね。