staticの使用例 | 静的メソッドとプロパティ | JavaScript 超完全入門 基本から発展までのすべて

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

staticとは?

staticは、JavaScriptでクラスに対して定義される特別なキーワードです。staticキーワードを使用すると、そのメソッドやプロパティはクラス自体に属するようになり、インスタンス化されたオブジェクトには属しません。これにより、クラスをインスタンス化せずに直接呼び出すことができ、クラスの共通の機能をまとめて提供するのに役立ちます。

静的メソッドの使用例

静的メソッドは、インスタンスではなくクラス自体で呼び出されるメソッドです。例えば、共通のユーティリティ関数や計算機能を提供する場合に静的メソッドを使うと便利です。

静的メソッドの例

class MathUtil {
    static add(a, b) {
        return a + b;
    }
}

console.log(MathUtil.add(5, 10));  // 15

この例では、MathUtilクラスのaddメソッドは静的メソッドとして定義されています。MathUtilクラスをインスタンス化することなく、直接addメソッドを呼び出すことができます。

静的プロパティの使用例

静的プロパティもまた、クラスに直接属するプロパティであり、インスタンスごとに個別の値を持つのではなく、クラス全体で共有されます。クラス全体で共通の値を管理したい場合に使用されます。

静的プロパティの例

class Counter {
    static count = 0;

    static increment() {
        this.count += 1;
    }
}

Counter.increment();
console.log(Counter.count);  // 1

Counter.increment();
console.log(Counter.count);  // 2

この例では、Counterクラスにcountという静的プロパティを定義しています。incrementメソッドでこの静的プロパティを増加させ、Counterクラス全体で共有されているcountの値を操作しています。

インスタンスメソッドとの違い

静的メソッドやプロパティは、クラス自体に属しているため、クラスのインスタンス化されたオブジェクトからはアクセスできません。一方、インスタンスメソッドやインスタンスプロパティは、特定のオブジェクトの状態に依存して動作します。

インスタンスメソッドと静的メソッドの違いの例

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

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

    static description() {
        console.log("This is a Person class.");
    }
}

const person1 = new Person("Taro");
person1.greet();  // "Hello, my name is Taro"

// person1.description();  // エラー: 静的メソッドにはインスタンスからアクセスできない
Person.description();  // "This is a Person class."

この例では、Personクラスのgreetメソッドはインスタンスメソッドであり、特定のインスタンスに対して呼び出されます。一方、descriptionは静的メソッドであり、クラス自体から呼び出されます。

静的メソッドとプロパティのユースケース

静的メソッドやプロパティは、以下のような場面で便利です:

  • ユーティリティ関数の提供: 例えば、Mathクラスのように、複数の計算メソッドを静的メソッドとして提供する場合。
  • クラス全体での共通の状態管理: 静的プロパティを使ってクラス全体で共有するデータを管理する場合。
  • クラスのメタ情報提供: クラスに関する説明や設定情報など、インスタンスに依存しない情報を静的メソッドとして提供する場合。

まとめ

staticキーワードを使うことで、クラスに属する静的メソッドやプロパティを定義できます。これにより、インスタンスを作成せずにクラス自体で共通の機能や情報を提供することが可能です。ユーティリティ関数や共通のデータ管理に適しており、クラス全体で共有すべき情報やメソッドを明確に分けることができます。