ホームページ > 記事 > ウェブフロントエンド > 「new.target」はどのように継承を有効にし、ES6 クラスのコンストラクター呼び出しを区別しますか?
ECMAScript 2015 仕様では 3 回しか言及されていませんが、「new.target」は§12.3.8.
"NewTarget" で定義されたメタ プロパティは、現在の関数環境の [[NewTarget]] 内部プロパティの値を取得します。この値は、関数がコンストラクターとして呼び出されるときに設定されます。
関数が new を使用して呼び出された場合、new.target は新しいインスタンスの作成に使用されるコンストラクター関数を参照します。これにより、開発者はコンストラクターと通常の関数呼び出しを区別できるようになります。
「NewTarget」は ES6 クラスで重要な役割を果たします。クラス コンストラクターが new で呼び出されると、最初は初期化されていない this が返されます。ただし、super() は、引数として new.target を渡しながら親コンストラクターを呼び出すことによってこれを初期化します。
このメカニズムにより、クラスは Array や Map などの組み込みオブジェクトから継承できます。 new.target を親コンストラクターに渡すことで、正しいプロトタイプ チェーンが確立され、新しいインスタンスが適切なプロトタイプ オブジェクトから確実に継承されます。
次のクラス構造を考えてみましょう。
class Parent { constructor() { // new.target = Child (from super() call) console.log(new.target); } } class Child extends Parent { constructor() { // new.target = Child (from new call) super(); console.log(this); } } new Child;
この例では、new.target は次のとおりです。
出力は次のようになります:
Child { __proto__: Child.prototype }
これは、new.target を使用してコンストラクターと通常の関数呼び出しを区別する方法と、 ES6 クラスの継承を管理します。
以上が「new.target」はどのように継承を有効にし、ES6 クラスのコンストラクター呼び出しを区別しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。