Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
prototype は Function インスタンスのデータプロパティで、関数が new 演算子でコンストラクターとして使用されたときに使用されます。これは新しいオブジェクトのプロトタイプになります。
オブジェクトです。
| 書込可能 | 可 |
| 列挙可能 | 不可 |
| 設定可能 | 不可 |
メモ: クラスは関数の一種なので、ここで説明するほとんどの内容はクラスの prototype プロパティにも当てはまります。唯一の顕著な違いは、クラスの prototype プロパティは書き込み不可であるということです。
関数が new で呼び出されると、そのコンストラクターの prototype プロパティが、結果オブジェクトのプロトタイプになります。
「継承とプロトタイプチェーン」に、コンストラクター関数の prototype プロパティと、結果オブジェクトのプロトタイプ間の操作に関する詳しい情報があります。
ある関数に prototype プロパティがあるというだけでは、コンストラクターとして認められるには不十分です。ジェネレーター関数は prototype プロパティを持っていますが、 new で呼び出すことはできません。
代わりに、ジェネレーター関数の prototype プロパティは、 new なしで呼び出されたときに使われます。prototypeプロパティは、返される Generator オブジェクトのプロトタイプとなります。
さらに、一部の関数は prototype を持っていても、 new で呼び出された場合は無条件に例外を送出します。例えば、 Symbol() 関数や BigInt() 関数は、 new で呼び出された場合には例外を発生させます。 Symbol.prototype と BigInt.prototype は、プリミティブ値のメソッドを提供するだけのためにあるので、ラッパーオブジェクトが直接構築されるべきではないからです。
次の関数には prototype がなく、たとえ後で prototype プロパティを手動で割り当てたとしても、コンストラクターとしては不適格です。
以下のものは有効なコンストラクターであり、 prototype があります。
バインドされた関数は prototype プロパティを持っていませんが、構築することができる場合があります。 構築された場合、代わりにターゲット関数が構築され、ターゲット関数が構築可能であれば、通常のインスタンスを返します。
関数の prototype プロパティは、既定では、1つのプロパティ constructor を持つプレーンオブジェクトです。 constructor プロパティは書き込み可能で、列挙不可、構成可能なプロパティです。
関数の prototype が Object 以外の何かに再代入されている場合、関数が new で呼び出されると、返されるオブジェクトのプロトタイプは Object.prototype になります。(言い換えれば、new は prototype プロパティを無視し、プレーンなオブジェクトを構築します。)
クラスフィールドは、各インスタンスにプロパティを追加します。クラスメソッドは、プロトタイプに「関数」プロパティを宣言します。しかし、プロトタイプに「関数」以外のプロパティを追加する方法はありません。すべてのインスタンス間で静的データを共有したい場合(例えば、 Error.prototype.name はすべてのエラーインスタンスで同じです)、クラスの prototype に手動で割り当てることができます。
これは、クラスが初期化される際に呼び出される静的初期化ブロックを使用することで、より人間に分かりやすくにすることができます。
| ECMAScript® 2027 Language Specification # sec-function-instances-prototype |
This page was last modified on 2026年4月12日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.