理解「new.target」
ECMAScript 2015 規範引入了一個稱為「new.target」的元屬性,該屬性在非箭頭函數來決定函數是否以建構函式呼叫。
定義與目的
「new.target」指的是第一個元屬性,形式上是規範第 12.3.8 節定義。它的唯一目的是檢索函數的“[[NewTarget]]”內部值的當前值。該值在函數呼叫時設置,類似於“this”綁定。
根據§8.1.1.3函數環境記錄,「[[NewTarget]]」值設定為「[[ Construct]]" newTarget 參數(如果該函數作為建構子呼叫)。否則,它的值保持未定義狀態。
ES6 類別的重要性
「new.target」在 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」元屬性如何促進 ES6 類別繼承?的詳細內容。更多資訊請關注PHP中文網其他相關文章!