「new.target」メタ プロパティは ES6 クラスの継承をどのように促進しますか?

Patricia Arquette
リリース: 2024-11-06 04:37:02
オリジナル
496 人が閲覧しました

How does the

「new.target」について

ECMAScript 2015 仕様では、「new.target」として知られるメタ プロパティが導入されています。関数がコンストラクターとして呼び出されたかどうかを判断するための非アロー関数。

定義と目的

「new.target」は最初のメタ プロパティを指し、正式には仕様の§12.3.8 で定義されています。その唯一の目的は、関数の内部値「[[NewTarget]]」の現在の値を取得することです。この値は、「this」バインディングと同様に、関数が呼び出されるときに設定されます。

§8.1.1.3 関数環境レコードによると、「[[NewTarget]]」値は「[[ Construct]]" 関数がコンストラクターとして呼び出される場合の newTarget パラメーター。それ以外の場合、値は未定義のままです。

ES6 クラスの重要性

「new.target」は、ES6 クラスの実装において重要な役割を果たし、ES6 クラスを継承できるようにします。組み込みオブジェクト。 「new」を使用してクラス コンストラクターを呼び出す場合、「this」値はまだ初期化されていません。ただし、super() メソッドが呼び出されると、オブジェクトが作成され、「newTarget」コンストラクターの「.prototype」から継承するように設定されます。

次の例は、クラス継承で "new.target" がどのように使用されるかを示しています:

class Parent {
  constructor() {
    // Implicit from super() call: new.target = Child
    // Implicit because Parent doesn't extend anything:
    // this = Object.create(new.target.prototype)
    console.log(new.target) // Child!
  }
}

class Child extends Parent {
  constructor() {
    // this is uninitialized (and would throw if accessed)
    // Implicit from new call: new.target = Child
    super() // this = Reflect.construct(Parent, [], new.target)
    console.log(this)
  }
}

new Child
ログイン後にコピー

この例では:

  • 親コンストラクターは "new.target" を使用してアクセスします子コンストラクター。
  • 子コンストラクターは、"this" 値が初期化される前に super() 呼び出しが行われた場合でも、"new.target" を使用して、"new" で呼び出されたことを判断します。
  • これにより、子コンストラクターが親プロトタイプから正しく継承できるようになります。

以上が「new.target」メタ プロパティは ES6 クラスの継承をどのように促進しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!