質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

2196閲覧

superについての質問です

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2019/03/04 12:02

以下で子クラスへの継承としてsuperを2回使いました。 node を起動したところ、2つめのsuperでエラーが生じました。理由が分かりません。

JavaScript

1class Animal{ 2 constructor(name,age){ 3 this.name=name; 4 this.age=age; 5 } 6 info(){ 7 console.log(`名前は${this.name}です。`); 8 console.log(`${this.age}歳です。`); 9 } 10} 11class Dog extends Animal{ 12 constructor(name,age,breed){ 13 super(name,age); 14 this.breed= breed; 15 } 16 info(){ 17 super(); 18 console.log(`犬種は${this.breed}です。`); 19 } 20 } 21 const dog = new Dog("jack",5,"プードル"); 22dog.info();

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/03/04 12:05

出ているエラーと、そのエラー解消のために調べたことや試したことを具体的に記載してください
guest

回答2

0

ベストアンサー

理由が分かりません。

それはね、あなたがMDNでsuperに関して調べてないからよ。
super - MDN - Mozilla

ITエンジニアとして成長したければリファレンスを読めという有り難い言葉があります。

しかし、JavaScriptはECMAScriptとして公開されている仕様がありますが、
これ読んでもちっとも頭に入ってこないんですよね。
ですがFirefox作っているMozillaという団体が作っているMDNというサイトが救世主なのです。
めっちゃ詳しい&正確なので、リファレンス代わりに目を通す癖を付けておくと良いです。

コンストラクター内で使用する場合、super キーワードを単独で置き、this キーワードが使われる前に使用しなくてはなりません。このキーワードは、親オブジェクトの関数を呼び出すためにも使用できます。

つまり、super()と単独で使えるのはコンストラクター内だけです。
ちゃんと書いてありますね。

構文

JavaScript

1super([arguments]); // 親コンストラクターを呼び出します。 2super.functionOnParent([arguments]);

今回infoで使っているのは下の構文が適切でしょう。
super()だとコンストラクタメソッド発火になってしまうので、
super.info()で実行してみてはどうですか?

ちらっと質問文のコードをデベロッパーツールのコンソールに貼り付けて、
supersuper.infoに書き換えただけで思ったような動作になりました。

やはりMDNというサイトは偉大でした。
JavaScriptの仕様部分で分からない事があったら目を通すだけの価値はあります。
Googleで「super mdn」みたいなワードで調べたら一番上に出てきますので、調べたい内容+MDNをつけるという小ネタは覚えておいてくださいね。

投稿2019/03/04 12:19

編集2019/03/04 12:43
miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

super(引数)の形が使えるのはコンストラクタだけです。一般のメソッドを呼ぶ場合はsuper.メソッド名(引数)の形としてください(MDN)。

投稿2019/03/04 12:14

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問