クラスの定義とインスタンス化 | クラス構文の基本 | JavaScript 超完全入門 基本から発展までのすべて

現在作成中です。今後加筆修正してまいります。
スポンサーリンク
スポンサーリンク

クラスとは?

JavaScriptでは、クラスはオブジェクトを生成するためのテンプレートとして機能します。クラスを定義することで、同じ構造や機能を持つ複数のオブジェクトを効率的に作成することができます。クラス構文はES6(ECMAScript 2015)で導入され、従来のコンストラクタ関数に代わるより簡潔でわかりやすい方法として広く使用されています。

クラスの定義

クラスは、classキーワードを使って定義されます。クラスには、オブジェクトのプロパティを初期化するためのコンストラクタ(constructor)メソッドが含まれており、このメソッドはクラスから新しいインスタンスを作成する際に自動的に呼び出されます。

クラス定義の基本例

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

    greet() {
        console.log("Hello, my name is " + this.name);
    }
}

// クラスのインスタンス化
const person1 = new Person("Taro", 25);
person1.greet();  // "Hello, my name is Taro"

この例では、Personというクラスが定義され、nameageというプロパティを持っています。newキーワードを使ってPersonクラスのインスタンスを作成し、そのインスタンスのメソッドgreetを呼び出しています。

クラスのインスタンス化

インスタンス化とは、クラスをもとに具体的なオブジェクトを作成することです。newキーワードを使用してクラスのインスタンスを作成し、そのインスタンスに定義されたプロパティやメソッドを利用することができます。

インスタンス化の例

const person2 = new Person("Hanako", 30);
console.log(person2.name);  // "Hanako"
console.log(person2.age);   // 30
person2.greet();  // "Hello, my name is Hanako"

この例では、person2という新しいインスタンスがPersonクラスから作成され、インスタンス化されたオブジェクトのプロパティnameageにアクセスしています。

コンストラクタの役割

クラス内のconstructorメソッドは、インスタンスが作成される際に呼び出され、オブジェクトのプロパティを初期化します。constructorはクラスごとに1つしか定義できませんが、他のメソッドと組み合わせてクラス内のさまざまな機能を実装することができます。

コンストラクタの例

class Animal {
    constructor(type, sound) {
        this.type = type;
        this.sound = sound;
    }

    makeSound() {
        console.log(this.sound);
    }
}

const dog = new Animal("Dog", "Woof");
dog.makeSound();  // "Woof"

この例では、Animalクラスがtypesoundという2つのプロパティを持ち、constructorメソッドによってインスタンスの初期化が行われています。新しいインスタンスdogでは、makeSoundメソッドを呼び出すと定義された音が出力されます。

クラスのプロトタイプ

JavaScriptのクラスは、内部的にはプロトタイプベースで動作しています。クラスで定義されたメソッドは、全てのインスタンスで共有されるプロトタイプオブジェクトに追加されます。これにより、同じメソッドが複数のインスタンスで効率よく使いまわされます。

プロトタイプ共有の例

class Car {
    constructor(brand) {
        this.brand = brand;
    }

    displayBrand() {
        console.log(this.brand);
    }
}

const car1 = new Car("Toyota");
const car2 = new Car("Honda");

car1.displayBrand();  // "Toyota"
car2.displayBrand();  // "Honda"

この例では、CarクラスのdisplayBrandメソッドはプロトタイプに保存されており、複数のインスタンスで共有されています。各インスタンスは独自のプロパティbrandを持ちますが、displayBrandメソッドは共通して利用されています。

クラス構文の利便性

クラス構文を使用することで、JavaScriptのオブジェクト指向プログラミングがより直感的で読みやすくなります。従来のコンストラクタ関数に比べて、クラス構文はコードが整理されやすく、メソッドやプロパティの定義が分かりやすくなります。また、継承(サブクラス化)やメソッドのオーバーライドなど、より高度な機能も実現しやすくなっています。

まとめ

JavaScriptのクラスは、オブジェクト指向プログラミングを行うための便利な仕組みであり、オブジェクトを簡潔に定義し、インスタンス化できます。constructorメソッドを使ってプロパティを初期化し、メソッドをクラス内に定義することで、効率的にオブジェクトを作成し再利用することができます。クラス構文を理解することで、より強力で保守性の高いコードを書くことができるでしょう。