首頁 >web前端 >js教程 >`new.target` 如何在 ES6 類別中啟用繼承並區分構造函數呼叫?

`new.target` 如何在 ES6 類別中啟用繼承並區分構造函數呼叫?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-03 11:53:29525瀏覽

How does `new.target` Enable Inheritance and Differentiate Constructor Calls in ES6 Classes?

理解「new.target」

定義和位置

儘管在ECMAScript 2015 規範中只提到了3 次,但「new.target 」是§12.3.8.

目的和用法

中定義的元屬性「NewTarget」檢索目前函數環境的[[NewTarget]] 內部屬性的值。當函數作為構造函數呼叫時,會設定此值。

如果使用 new 呼叫函數,new.target 將引用用於建立新實例的建構函數。這使開發人員能夠區分構造函數和普通函數呼叫。

對於 ES6 類的意義

「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 為:

  • Parent 建構子中的子級(透過super() 呼叫呼叫)
  • Child 建構函式中的子級(用new 呼叫)

輸出將是:

Child
{ __proto__: Child.prototype }

這示範如何使用new.target 來區分建構函式和普通函式調用,以及管理ES6 類別中的繼承。

以上是`new.target` 如何在 ES6 類別中啟用繼承並區分構造函數呼叫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn