Qraft(クラフト) 資格・学習クイズアプリ

JavaScript入門 練習問題 22:構文:クラス宣言とconstructorメソッド

次のクラス定義に関するコードの実行結果として正しいものはどれですか?

```javascript
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(this.name + 'が鳴きました');
}
}

const dog = new Animal('ポチ');
dog.speak();
```

  1. ポチが鳴きました
  2. undefinedが鳴きました
  3. Animalが鳴きました
  4. コンストラクタエラーが発生する
  5. 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はプロパティ名の文字列ではなく、代入された値'ポチ'を参照する

← 前の問題問題一覧次の問題 →
アプリで解いてレーティングを上げる(無料・登録不要)