JavaScript入門 練習問題 22:構文:クラス宣言とconstructorメソッド
次のクラス定義に関するコードの実行結果として正しいものはどれですか?
```javascript
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(this.name + 'が鳴きました');
}
}
const dog = new Animal('ポチ');
dog.speak();
```
- ポチが鳴きました
- undefinedが鳴きました
- Animalが鳴きました
- コンストラクタエラーが発生する
- nameが鳴きました
正解と解説を見る
正解:ポチが鳴きました
new Animal('ポチ')でインスタンスを作成すると、constructorが呼び出され引数'ポチ'がthis.nameに代入されます。その後speak()を呼び出すとthis.nameの値である'ポチ'が使われます。
【正解の理由】constructorによってthis.name = 'ポチ'が設定されるため、speak()内のthis.nameは'ポチ'となり、「ポチが鳴きました」という出力になります。
【不正解の理由】
• 「undefinedが鳴きました」:constructorに引数'ポチ'が正しく渡され、this.nameに代入されているためundefinedにはならない
• 「Animalが鳴きました」:this.nameはクラス名ではなくconstructorに渡された引数の値が入る
• 「コンストラクタエラーが発生する」:constructorの記述は正しい構文であり、エラーは発生しない
• 「nameが鳴きました」:this.nameはプロパティ名の文字列ではなく、代入された値'ポチ'を参照する