コンストラクタとメソッド | クラス構文の基本 | JavaScript 超完全入門 基本から発展までのすべて

スポンサーリンク
スポンサーリンク

コンストラクタとは?

JavaScriptのコンストラクタは、クラスからオブジェクトを作成する際に自動的に呼び出される特別なメソッドです。constructorという名前で定義され、オブジェクトのプロパティを初期化する役割を持ちます。クラスのインスタンスが作成されるたびに、このコンストラクタが呼び出されます。

コンストラクタの例

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

// インスタンス化
const person1 = new Person("Taro", 25);
console.log(person1.name);  // "Taro"
console.log(person1.age);   // 25

この例では、Personクラスのコンストラクタが定義され、nameageプロパティを初期化しています。インスタンス化する際に、これらのプロパティに値を設定できます。

メソッドとは?

クラス内のメソッドは、クラスのインスタンスによって使用できる関数です。メソッドは通常クラスの外で呼び出され、オブジェクトに関連する動作を定義します。クラス構文を使うことで、クラス内にメソッドを簡単に定義し、全てのインスタンスがそのメソッドを共有することができます。

メソッドの例

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"

この例では、greetというメソッドが定義されています。greetメソッドは、クラスのインスタンスであるperson1が呼び出すことができ、this.nameを使ってそのインスタンスのnameプロパティにアクセスしています。

コンストラクタとメソッドの関係

コンストラクタはオブジェクトの初期化を行い、メソッドはそのオブジェクトが持つ機能を定義します。メソッドは、コンストラクタで定義されたプロパティにアクセスすることができ、オブジェクトの動作をカプセル化します。これにより、クラスのインスタンスに関連する操作を簡単にまとめて扱うことができます。

コンストラクタとメソッドを組み合わせた例

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

    displayInfo() {
        console.log("Car: " + this.brand + " " + this.model);
    }
}

// インスタンス化
const car1 = new Car("Toyota", "Corolla");
const car2 = new Car("Honda", "Civic");

car1.displayInfo();  // "Car: Toyota Corolla"
car2.displayInfo();  // "Car: Honda Civic"

この例では、Carクラスが定義され、コンストラクタでbrandmodelを初期化しています。また、displayInfoメソッドが定義されており、各インスタンスの情報を表示できます。

クラス内でのメソッド共有

クラス内で定義されたメソッドは、全てのインスタンスで共有されます。これにより、メモリ効率が向上し、メソッドが無駄に重複して定義されることを防ぎます。クラス内のメソッドはプロトタイプチェーンに保存され、必要なときにすべてのインスタンスからアクセス可能です。

メソッド共有の例

class Animal {
    constructor(name) {
        this.name = name;
    }

    speak() {
        console.log(this.name + " makes a sound.");
    }
}

const dog = new Animal("Dog");
const cat = new Animal("Cat");

dog.speak();  // "Dog makes a sound."
cat.speak();  // "Cat makes a sound."

この例では、speakメソッドはAnimalクラス内に定義されていますが、dogcatなどのインスタンスがそれぞれ共有して使用しています。これにより、メソッドが効率的に再利用されます。

まとめ

JavaScriptのクラスにおいて、コンストラクタはオブジェクトを初期化し、メソッドはそのオブジェクトの機能を定義します。コンストラクタとメソッドを組み合わせることで、柔軟で効率的なオブジェクト指向プログラミングが可能になります。メソッドはクラス内で共有され、インスタンスごとにプロパティが異なっていても、同じ機能を効率的に利用できるようになります。