From 4f1cf93bd612c68ce2a21a9ece6a6715b5dbc308 Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Wed, 16 Feb 2022 12:22:06 +0900 Subject: Web/JavaScript/Reference/Operators 以下の残りの記事を移行 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reference/operators/new.target/index.html | 96 ---------------------- 1 file changed, 96 deletions(-) delete mode 100644 files/ja/web/javascript/reference/operators/new.target/index.html (limited to 'files/ja/web/javascript/reference/operators/new.target/index.html') diff --git a/files/ja/web/javascript/reference/operators/new.target/index.html b/files/ja/web/javascript/reference/operators/new.target/index.html deleted file mode 100644 index cf1d45959f..0000000000 --- a/files/ja/web/javascript/reference/operators/new.target/index.html +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: new.target -slug: Web/JavaScript/Reference/Operators/new.target -tags: -- Classes -- ECMAScript 2015 -- JavaScript -- Language feature -- Reference -translation_of: Web/JavaScript/Reference/Operators/new.target ---- -
{{JSSidebar("Operators")}}
- -

new.target は擬似プロパティで、関数やコンストラクターが new 演算子を使用して呼び出されたかどうかを検出することができます。 new 演算子を使用して呼び出されたコンストラクターや関数の中では、 new.target はコンストラクターや関数への参照を返します。通常の関数呼び出しの場合、 new.target は {{jsxref("undefined")}} になります。

- -
{{EmbedInteractiveExample("pages/js/expressions-newtarget.html")}}
- -

構文

- -
new.target
- -

解説

- -

new.target の構文は、new キーワードとドット、 target 識別子で構成されています。通常、ドットの左側はプロパティアクセスが行われるオブジェクトですが、ここでの new はオブジェクトではありません。

- -

new.target は、すべての関数で使用できる擬似プロパティです。

- -

クラスのコンストラクターでは、構築されたクラスを参照します。

- -

通常の関数では、new 演算子を介して呼び出されたと仮定して、関数自体を参照します。それ以外の場合、new.target は {{jsxref("undefined")}} になります。

- -

アロー関数では、new.target は周囲のスコープから継承されます。

- -

- -

関数呼び出しにおける new.target の使用

- -

通常の関数呼び出しでは (コンストラクター関数の呼び出しとは対照的に)、 new.target は {{jsxref("undefined")}} になります。これにより、関数が new でコンストラクターとして呼び出されたかを検出できます。

- -
function Foo() {
-  if (!new.target) { throw 'Foo() must be called with new' }
-  console.log('Foo instantiated with new')
-}
-
-new Foo()  // logs "Foo instantiated with new"
-Foo()      // throws "Foo() must be called with new"
-
- -

コンストラクターにおける new.target

- -

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

- -
class A {
-  constructor() {
-    console.log(new.target.name)
-  }
-}
-
-class B extends A { constructor() { super() } }
-
-let a = new A()  // logs "A"
-let b = new B()  // logs "B"
-
-class C { constructor() { console.log(new.target)  } }
-class D extends C { constructor() { super()  } }
-
-let c = new C()  // logs class C{constructor(){console.log(new.target);}}
-let d = new D()  // logs class D extends C{constructor(){super();}}
- -

上記の C および D クラスの例から、 new.target は初期化されたクラスのクラス定義を指しているように見えます。たとえば、dnew D() で初期化した場合は、 D のクラス定義が出力され、同様に c の場合は C のクラスが出力されます。

- -

仕様書

- - - - - - - - - - -
仕様書
{{SpecName('ESDraft', '#sec-built-in-function-objects', 'Built-in Function Objects')}}
- -

ブラウザーの互換性

- -

{{Compat("javascript.operators.new_target")}}

- -

関連情報

- - -- cgit v1.2.3-54-g00ecf