Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2016年3月以降、すべてのブラウザーで利用可能です。
static キーワードは、クラスに静的メソッドや静的フィールド、または静的初期化ブロックを定義します(この使い方について詳しくは、リンク先を参照してください)。 静的プロパティは、クラスのインスタンスから直接アクセスすることはできません。代わりに、クラス自体に対してアクセスします。
静的メソッドは多くの場合、オブジェクトの生成や複製を行う関数などのユーティリティ関数です。静的プロパティはキャッシュ、固定的な構成、その他の各インスタンスに複製する必要のないデータです。
メモ: クラスの文脈において、 MDN Web Docs のコンテンツではプロパティとフィールドという用語を同等のものとして使用しています。
それ以外にも構文上の制約があります。
このページでは、静的メソッド、静的アクセサ、静的フィールドを含む、クラスのパブリック静的プロパティを紹介します。
パブリック静的機能は、static キーワードを使用して宣言します。これらはクラス評価時に、 [[DefineOwnProperty]] の意味づけ(これは本質的に Object.defineProperty() です)を使用して、クラスのコンストラクターに追加されます。これらは、コンストラクターから再びアクセスします。
静的メソッドの多くは、インスタンスを作成したり複製したりするなどの、ユーティリティ関数です。パブリック静的フィールドは、作成するすべてのクラスインスタンスではなく、クラスごとに一つだけフィールドを存在させたい場合に有益です。これは、キャッシュや固定の構成値、 あるいはインスタンスをまたがって複製する必要のないデータなどに有益です。
静的フィールド名は計算できます。計算式の this 値はクラス定義の周囲の this であり、クラス名を参照すると、クラスがまだ初期化されていないため ReferenceError になります。この式では await と yield は期待どおりに動作します。
静的フィールドは初期化子を持つことができます。初期化子を持たない静的フィールドは undefined に初期化されます。パブリック静的フィールドはサブクラスでは再初期化されませんが、プロトタイプチェーン経由でアクセスすることができます。
フィールド初期化子では、 this は現在のクラス(その名前からもアクセスすることができます)を参照し、 super は基底クラスのコンストラクターを参照します。
式は同期的に評価されます。初期化子式で(await や yield)を使用することはできません。(初期化子式は暗黙に関数に包まれていると考えてください)。
静的フィールド初期化子と静的初期化ブロックは、 1 つずつ評価されます。フィールド初期化子は、それより上のフィールド値を参照することはできますが、それより下のフィールド値を参照することはできません。静的メソッドはすべて事前に追加され、アクセスすることができますが、初期化されるフィールドより下のフィールドを参照している場合、呼び出すと期待した動作をしないことがあります。
メモ: これはプライベート静的フィールドではより重要です。初期化されていないプライベートフィールドにアクセスすると、たとえそのプライベートフィールドが下で宣言されていたとしても、 TypeError が発生するからです。(プライベートフィールドが宣言されていない場合は、早期に SyntaxError となります。)
次の例はいくつかのことを説明しています。
同じクラス内の静的メソッドまたはプロパティを静的メソッドから呼び出すには、 this キーワードを使います。
静的メソッドは静的ではないメソッドの this キーワードを使用して直接アクセスすることができません。呼び出すにはクラス名を使用して クラス名.静的メソッド名() / クラス名.静的プロパティ名 のようにするか、 constructor プロパティのメソッドとして this.constructor.静的メソッド名() / this.constructor.静的プロパティ名 のようにしてください。
| ECMAScript® 2027 Language Specification # sec-class-definitions |
ブラウザー互換性一覧表を表示するには、JavaScript を有効にしてください。
より良いインターネットのための青写真。
このコンテンツの一部は、©1998–2026 個人の mozilla.org 協力者です。コンテンツはクリエイティブ・コモンズ・ライセンスのもとで利用できます。