JavaScript 逆引き集 | static メソッド

JavaScript JavaScript
スポンサーリンク

static メソッド — static build(){}

JavaScript の static メソッドは「インスタンスを作らなくてもクラスから直接呼び出せる関数」です。
初心者は「クラスの便利関数」と覚えると理解しやすいです。インスタンスごとのデータにはアクセスできず、クラス全体で共通の処理をまとめるのに使います。


基本のコード例

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

  // static メソッド
  static build(name) {
    return new User(name);
  }
}

const u = User.build("Aki"); // インスタンスを作る便利関数
console.log(u.name); // → "Aki"
JavaScript
  • static build()User.build() のようにクラスから直接呼び出す。
  • new User(...) を隠して「わかりやすい工場メソッド」を作れる。

よく使うテンプレート集

ユーティリティ関数

class MathUtil {
  static square(x) {
    return x * x;
  }
  static cube(x) {
    return x * x * x;
  }
}

console.log(MathUtil.square(3)); // 9
console.log(MathUtil.cube(2));   // 8
JavaScript

インスタンス生成の工場メソッド

class Point {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }

  static origin() {
    return new Point(0, 0);
  }
}

const p = Point.origin();
console.log(p); // Point { x: 0, y: 0 }
JavaScript

JSONからインスタンスを作る

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

  static fromJSON(json) {
    const obj = JSON.parse(json);
    return new User(obj.name, obj.age);
  }
}

const data = '{"name":"Mika","age":25}';
const u = User.fromJSON(data);
console.log(u.name, u.age); // → "Mika" 25
JavaScript

例題: 商品クラスと工場メソッド

class Product {
  constructor(name, price) {
    this.name = name;
    this.price = price;
  }

  static buildDefault() {
    return new Product("未定義商品", 0);
  }
}

const p1 = new Product("ノート", 100);
const p2 = Product.buildDefault();

console.log(p1); // Product { name: 'ノート', price: 100 }
console.log(p2); // Product { name: '未定義商品', price: 0 }
JavaScript
  • 効果: buildDefault() を使うと「デフォルト商品」を簡単に作れる。

実務でのコツ

  • 便利関数をまとめる: 計算や変換など、インスタンスに依存しない処理は static に。
  • 工場メソッド: インスタンス生成をわかりやすくする。
  • インスタンスからは呼べない: u.build() はエラー。必ず ClassName.build()
  • ES6以降の標準: モジュールやユーティリティクラスでよく使う。

ありがちなハマりポイントと対策

  • インスタンスから呼べない:
    • const u = new User("Aki"); u.build(); → エラー。
    • 対策: User.build() のようにクラスから呼ぶ。
  • this の意味が違う:
    • static メソッド内の this は「クラス自身」を指す。

練習問題(日時ユーティリティ)

class DateUtil {
  static now() {
    return new Date();
  }
  static format(date) {
    return date.toISOString();
  }
}

console.log(DateUtil.format(DateUtil.now()));
JavaScript
  • 効果: DateUtil.now() で現在日時を取得し、DateUtil.format() で整形できる。

直感的な指針

  • static = クラス全体の便利関数。
  • インスタンス不要で呼べる。
  • 工場メソッドやユーティリティ関数に最適。
  • 初心者は「計算関数」「デフォルト生成」「JSON変換」で練習すると理解しやすい。

これを覚えれば「インスタンスに依存しない処理」を整理でき、クラス設計がぐっとわかりやすくなります。

タイトルとURLをコピーしました