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