🚀

クラスについて整理

2024/10/09に公開

【名前空間としてのクラス(=ステートレスオブジェクト)】

https://zenn.dev/417yr/articles/f09d29124fc803

  • staticがメンバ変数とメソッドの前に付いている
  • インスタンス化せずに使う
test.js
class Circle {

    static PI = 3.14;

    static perimeter(radius){
        return 2 * Circle.PI * radius;
    }

    static area(radius){
        return Circle.PI * radius * radius;
    }

}
console.log(Circle.perimeter(4));
//25.12

【インスタンス化して使うクラス】

  • 上記の「名前空間としてのクラス」と比較すれば分かるように、staticが付いてない
  • インスタンスを生成するコンストラクタがある
test.js
class Counter {
    constructor() {
        this.count = 0;
    }
    // `increment`メソッドをクラスに定義する
    increment() {
        // `this`は`Counter`のインスタンスを参照する
        this.count++;
    }
}
const counterA = new Counter();
const counterB = new Counter();
// `counterA.increment()`のベースオブジェクトは`counterA`インスタンス
counterA.increment();
// 各インスタンスの持つプロパティ(状態)は異なる
console.log(counterA.count); // => 1
console.log(counterB.count); // => 0

【参考】

https://jsprimer.net/basic/class/#static-method

Discussion