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

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

Mary-Kate Olsen
發布: 2024-11-03 11:53:29
原創
527 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板