Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2017年9月.
new.target はメタプロパティで、関数やコンストラクターが new 演算子を使用して呼び出されたかどうかを検出することができます。 new 演算子を使用して呼び出したコンストラクターや 関数の中では、 new.target は new が呼び出されたコンストラクターまたは関数への参照を返します。通常に呼び出された関数の中では、 new.target は undefined になります。
new.target は、構築可能な関数値または undefined であることが保証されています。
new.target 構文は、キーワード new とドットと target 識別子で構成されています。new は識別子ではなく予約語であるため、これはプロパティアクセサーではなく、特別な式構文です。
new.target メタプロパティは、すべての関数/クラスの本体内で利用できます。関数やクラス の外部で new.target を使用すると構文エラーになります。
通常の関数呼び出しでは (コンストラクター関数の呼び出しとは対照的に)、 new.target は undefined になります。これにより、関数が new 付きでコンストラクターとして呼び出されたかを検出できます。
クラスのコンストラクターでは、new.target は new で直接実行されたコンストラクターを参照します。これは、コンストラクターが親クラスにあり、子コンストラクターから委任された場合も同様です。new.target は、new が呼び出されたクラスを指します。例えば、b が new B() を使用して初期化された際には、B の名前が表示されます。同様に、a の場合、クラス A の名前が表示されます。
Reflect.construct() やクラスが登場する以前は、継承を実装する一般的な方法として、this の値を渡し、基底クラスのコンストラクターでそれを変更させる手法が用いられていました。
ただし、call() および apply() は実際には関数を「構築」するのではなく「呼び出し」するため、new.target の値は undefined になります。これは、Base() が new で構築されたかどうかを確認する場合、エラーが発生するか、それ以外にも予期しない動作を引き起こす可能性があるということの意味します。例えば、Map() コンストラクターは new なしでは呼び出せないため、この方法で Map を拡張することはできません。
すべての組み込みコンストラクターは、 new.target.prototype を読み取ることで、新規インスタンスのプロトタイプチェーン全体を直接構築します。したがって、(1) Base が new で構築され、(2) new.target が Base 自体ではなくサブクラスを指すようにするには、 Reflect.construct() を使用する必要があります。
メモ: 実際、 Reflect.construct() が存在しないため、 ES6 以前のコードへトランスパイルする際には、組み込みオブジェクトを正しくサブクラス化することができません(Error のサブクラス化など)。
ただし、 ES6 のコードを書く場合は、読み取り可能でエラーの可能性が低いクラスと extends の使用を推奨します。
| ECMAScript® 2027 Language Specification # sec-built-in-function-objects |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2026年1月18日 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.