JSでクラスとは何ですか?

JavaScriptにおけるクラスとは?

オブジェクト指向プログラミングでは、クラス はオブジェクト生成、状態(メンバ変数)の初期値の提供や振る舞いの実装(メンバ関数またはメソッド)のための拡張可能なプログラムコードテンプレートです。 実践では、ユーザや商品など、同じ種類のオブジェクトを大量に作成することがしばしばあります。

クラスの定義とインスタンス化

JavaScriptでは、クラスはclassキーワードを用いて定義します。クラスはオブジェクトの設計図のようなものであり、具体的なデータを持つオブジェクトはクラスから生成されます。生成されたオブジェクトはインスタンスと呼ばれます。


class User {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  sayHi() {
    console.log(`こんにちは、私は${this.name}です。${this.age}歳です。`);
  }
}

// Userクラスのインスタンスを生成
const user1 = new User('田中太郎', 30);
const user2 = new User('佐藤花子', 25);

// メソッドの呼び出し
user1.sayHi(); // 出力結果: こんにちは、私は田中太郎です。30歳です。
user2.sayHi(); // 出力結果: こんにちは、私は佐藤花子です。25歳です。

上記コードでは、Userクラスを定義し、nameageというプロパティを持つオブジェクトを生成するコンストラクタを定義しています。また、sayHiメソッドを定義し、オブジェクトのnameageプロパティを用いて挨拶をコンソールに出力しています。newキーワードを用いることで、Userクラスのインスタンスを生成することができます。

クラスの継承

クラスは継承を用いることで、既存のクラスの機能を拡張することができます。継承元のクラスをスーパークラス、継承先のクラスをサブクラスと呼びます。サブクラスはスーパークラスのプロパティやメソッドを継承し、独自の機能を追加することができます。


class AdminUser extends User {
  constructor(name, age, isAdmin) {
    super(name, age); // スーパークラスのコンストラクタを呼び出す
    this.isAdmin = isAdmin;
  }

  showAdminInfo() {
    console.log(`管理者権限: ${this.isAdmin}`);
  }
}

const adminUser = new AdminUser('山田管理者', 40, true);
adminUser.sayHi(); // 出力結果: こんにちは、私は山田管理者です。40歳です。
adminUser.showAdminInfo(); // 出力結果: 管理者権限: true

上記コードでは、Userクラスを継承したAdminUserクラスを定義しています。AdminUserクラスはUserクラスのnameageプロパティとsayHiメソッドを継承し、さらにisAdminプロパティとshowAdminInfoメソッドを追加しています。super()を用いることで、スーパークラスのコンストラクタを呼び出すことができます。

クラスとオブジェクトの関係

クラスとオブジェクトの関係を以下の表にまとめます。

項目 説明
クラス オブジェクトの設計図、テンプレート
オブジェクト クラスから生成された具体的なデータを持つインスタンス

参考資料

関連QA

Q1: JavaScriptのクラスと他の言語のクラスの違いは?

A1: JavaScriptのクラスは、プロトタイプベースのオブジェクト指向言語であるため、他のクラスベースのオブジェクト指向言語と比較して、継承やカプセル化の仕組みが異なります。詳細はMDNのドキュメントを参照してください。

Q2: クラスのメリットは?

A2: クラスを利用することで、コードの再利用性や保守性を高めることができます。また、オブジェクト指向プログラミングの概念を用いることで、複雑なプログラムをより分かりやすく、開発しやすい構造にすることができます。

Q3: クラスの使い分けは?

A3: 同じような性質を持つオブジェクトを複数作成する場合は、クラスを用いると便利です。逆に、一度しか使用しないオブジェクトや、他のオブジェクトと共有する必要がない場合は、クラスを使用する必要はありません。

その他の参考記事:JavaScript クラス