クラスとは?
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
というクラスが定義され、name
とage
というプロパティを持っています。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
クラスから作成され、インスタンス化されたオブジェクトのプロパティname
とage
にアクセスしています。
コンストラクタの役割
クラス内の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
クラスがtype
とsound
という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
メソッドを使ってプロパティを初期化し、メソッドをクラス内に定義することで、効率的にオブジェクトを作成し再利用することができます。クラス構文を理解することで、より強力で保守性の高いコードを書くことができるでしょう。