From 219286333942cdb1f3f8e186d03efebad00a9f42 Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Tue, 20 Apr 2021 21:43:30 +0900 Subject: new.target 擬似プロパティを更新 (#454) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2021/02/21 の英語版に同期 --- .../reference/operators/new.target/index.html | 81 +++++++++------------- 1 file changed, 32 insertions(+), 49 deletions(-) diff --git a/files/ja/web/javascript/reference/operators/new.target/index.html b/files/ja/web/javascript/reference/operators/new.target/index.html index b00f08cb4e..cf1d45959f 100644 --- a/files/ja/web/javascript/reference/operators/new.target/index.html +++ b/files/ja/web/javascript/reference/operators/new.target/index.html @@ -2,44 +2,42 @@ title: new.target slug: Web/JavaScript/Reference/Operators/new.target tags: - - Classes - - ECMAScript 2015 - - JavaScript - - Language feature - - Reference +- 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")}} です。

+

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

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

構文

+
new.target
-

構文

+

解説

-
new.target
+

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

-

概要

+

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

-

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

+

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

-

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

- -

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

- -

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

+

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

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

-

+

-

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

+

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

-

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

+

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

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

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

+

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

-

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

+

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

-
class A {
+
class A {
   constructor() {
     console.log(new.target.name)
   }
@@ -69,41 +67,26 @@ 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();}}
-

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

- -

仕様

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

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

-

仕様

+

仕様書

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

ブラウザー実装状況

- - +

ブラウザーの互換性

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

-

関連情報

+

関連情報

  • 関数
  • -- cgit v1.2.3-54-g00ecf