We're looking for a user researcher to understand the needs of developers and designers. Is this you or someone you know? Check out the post: https://mzl.la/2IGzdXS

new.target プロパティは、関数やコンストラクタが new 演算子を使用して呼び出されたかどうかを検出できるようにします。コンストラクタや関数内で、new 演算子でインスタンス生成すると、new.target はコンストラクタや関数への参照を返します。通常の関数呼び出しの場合、new.targetundefined です。




new.target 構文は、"new" キーワードとドット、プロパティ名 "target" で構成されています。通常、"new." はプロパティアクセスへのコンテキストとして機能しますが、"new." は本当はオブジェクトではありません。しかし、コンストラクタの呼び出しで、new.targetnew で実行されたコンストラクタを参照し、"new." は仮想コンテキストになります。

new.target プロパティは、すべての関数で使用できるメタプロパティです。アロー関数 では、new.target は周囲の関数の new.target を参照します。

関数呼び出しにおいての new.target の使用

通常の関数呼び出しでは(コンストラクタ関数の呼び出しとは反対に)、new.targetundefined です。 これは、関数がコンストラクタとして new で呼び出されたかを検出できます。

function Foo() {
  if (!new.target) throw "Foo() must be called with new";
  console.log("Foo instantiated with new");

Foo(); // throws "Foo() must be called with new"
new Foo(); // logs "Foo instantiated with new"

コンストラクタにおいての new.target

クラスコンストラクタで、new.targetnew で直接実行されたコンストラクタを参照します。これは、コンストラクタは親クラスにあり、子コンストラクタからデリゲートされた場合も同様です。

class A {
  constructor() {

class B extends A { constructor() { super(); } }

var a = new A(); // logs "A"
var b = new B(); // logs "B"


仕様 ステータス コメント
ECMAScript 2015 (6th Edition, ECMA-262)
Built-in Function Objects の定義
標準 初期定義。
ECMAScript Latest Draft (ECMA-262)
Built-in Function Objects の定義


We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本サポート 46.0 41 (41) 未サポート 未サポート 未サポート
機能 Android Android Webview Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Chrome for Android
基本サポート 未サポート 46.0 41.0 (41) 未サポート 未サポート 未サポート 46.0



このページの貢献者: YuichiNukiyama, shide55
最終更新者: YuichiNukiyama,