JavaScriptにおける**静的プロパティ(Static Properties)と静的メソッド(Static Methods)**は、クラスやオブジェクトの設計において重要な役割を果たします。これらはインスタンスに関連せず、クラス自体に直接関連する特性や機能を提供します。この記事では、静的プロパティと静的メソッドについて、基本的な概念から実際の使用例までを詳しく解説します。
1. 静的プロパティ(Static Properties)
静的プロパティとは、クラスのインスタンスではなく、クラス自体に紐づくプロパティです。通常のインスタンスプロパティは各オブジェクトに固有の値を保持しますが、静的プロパティはクラス自体に属し、すべてのインスタンスで共有されます。これにより、クラス全体で共通のデータを保持したり、クラスに関連する設定値を一元管理したりすることができます。

静的プロパティの定義方法
静的プロパティは、クラス内でstatic
キーワードを使用して定義します。例えば、次のように書くことができます。
javascriptclass Car {
static manufacturer = "Toyota";
constructor(model) {
this.model = model;
}
}
console.log(Car.manufacturer); // "Toyota"
この例では、Car
クラスにmanufacturer
という静的プロパティがあります。このプロパティはCar
クラス全体に共通で、インスタンス化された個々のCar
オブジェクトには存在しません。したがって、Car.manufacturer
を直接呼び出すことでアクセスできます。
静的プロパティの使用例
静的プロパティは、インスタンスごとの状態を持たない共有の値を保持するために使用されます。例えば、カウンタを保持する場合などが考えられます。
javascriptclass Counter {
static count = 0;
constructor() {
Counter.count++;
}
static getCount() {
return Counter.count;
}
}
const counter1 = new Counter();
const counter2 = new Counter();
console.log(Counter.getCount()); // 2
この例では、Counter
クラスの静的プロパティcount
がカウントを保持しており、各インスタンスが作成されるたびにこの値が増加します。Counter.getCount()
メソッドを呼び出すことで、count
の値を取得できます。
2. 静的メソッド(Static Methods)
静的メソッドは、インスタンスに関連せず、クラス自体に直接関連するメソッドです。通常のインスタンスメソッドはクラスのインスタンスに結びついていますが、静的メソッドはクラス全体で共有される機能を提供します。インスタンスを生成することなく、クラスから直接呼び出すことができます。
静的メソッドの定義方法
静的メソッドも、プロパティと同様にstatic
キーワードを使用して定義します。例えば、次のように書きます。
javascriptclass MathUtil {
static add(a, b) {
return a + b;
}
}
console.log(MathUtil.add(5, 3)); // 8
この例では、MathUtil
クラスにadd
という静的メソッドがあります。このメソッドはインスタンス化せずに、クラス名から直接呼び出すことができます。
静的メソッドの使用例
静的メソッドは、インスタンス化せずに実行したい汎用的な処理やユーティリティメソッドを定義するのに便利です。例えば、数値の計算やデータの処理など、インスタンスの状態に依存しない処理を静的メソッドで実装します。
javascriptclass Converter {
static toUpperCase(str) {
return str.toUpperCase();
}
static toLowerCase(str) {
return str.toLowerCase();
}
}
console.log(Converter.toUpperCase("hello")); // "HELLO"
console.log(Converter.toLowerCase("WORLD")); // "world"
この例では、Converter
クラスに文字列を大文字に変換するtoUpperCase
メソッドと、小文字に変換するtoLowerCase
メソッドがあります。これらのメソッドは、クラス名から直接呼び出すことができ、インスタンス化する必要はありません。
3. 静的プロパティと静的メソッドの違い
静的プロパティと静的メソッドの主な違いは、その目的と使用方法にあります。
-
静的プロパティ: クラス自体に関連するデータを保持します。インスタンス化したオブジェクトには影響を与えません。
-
静的メソッド: クラス自体に関連する処理を定義します。インスタンスを生成せずに、クラスから直接呼び出せます。
これらはどちらもクラス全体に共通の特性や機能を提供するため、インスタンスごとに値を保持する必要がない場合に非常に便利です。
4. 静的メソッドとインスタンスメソッドの使い分け
静的メソッドとインスタンスメソッドは、使い分けることが重要です。インスタンスメソッドは、オブジェクトの状態に依存する処理を行いますが、静的メソッドはクラス全体で共通の処理を行う場合に適しています。
-
インスタンスメソッド: オブジェクトのプロパティを操作する必要がある場合。
-
静的メソッド: クラス全体で共通の処理を行う場合。
例えば、次のような場合はインスタンスメソッドを使うべきです。
javascriptclass Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
console.log(`Hello, my name is ${this.name}.`);
}
}
const person = new Person("Alice", 30);
person.greet(); // "Hello, my name is Alice."
一方で、クラス全体で共通の機能を提供する場合には、静的メソッドを使います。
javascriptclass Person {
static species = "Homo sapiens";
constructor(name) {
this.name = name;
}
static getSpecies() {
return Person.species;
}
}
console.log(Person.getSpecies()); // "Homo sapiens"
5. まとめ
JavaScriptにおける静的プロパティと静的メソッドは、クラス自体に関連するデータや機能を提供します。静的プロパティはクラスの共通データを保持し、静的メソッドはクラス全体で共有される処理を定義します。これらは、インスタンス化せずにクラスから直接アクセスできるため、オブジェクト指向プログラミングにおいて非常に便利な機能です。