ES11 中的 new.target 特性详解

阅读时长 3 分钟读完

在之前的 JavaScript 版本中,构造函数中使用的 this 始终指向当前方法的实例,而属性 prototype 是创建该实例的对象。但是在 ES11 中,新的 new.target 属性提供了一种方法来获取构造函数的引用,而不是实例本身的引用。本文将深入探讨 new.target 属性的详细内容,并提供使用它的示例代码。

new.target 属性

new.target 是一个元属性,表示当一个函数或构造函数使用 new 关键字进行实例化时,该函数或构造函数的引用。如果函数或构造函数不是使用 new 关键字进行实例化,则 new.targetundefined。元属性是只读的,并且在函数内部始终可用。

-- -------------------- ---- -------
-------- --------- -
  ------------------------
-

-------- --------- -
  ------------------------
-

---------- -- ---------
--- ---------- -- ---------- --------
----------------- -- ---------
--- ---------- -- ---------- --------

在上面的示例中,Person1Person2 函数都使用 new.target 属性进行引用,但 Person2 函数使用了一个 call 方法,所以 new.target 为 undefined。

使用 new.target 创建继承的类

在 ES11 中,我们可以使用 new.target 属性来创建继承的类。在构造函数内使用 new.target 属性可以确保在继承时调用正确的构造函数。例如,我们有一个 Person 类和一个 Student 类,Student 类继承自 Person 类。我们可以在 Student 类的构造函数中使用 new.target 属性来确保在继承时调用正确的构造函数。

-- -------------------- ---- -------
----- ------ -
  ----------------- ---- -
    ----------------------------- -- ------
    --------- - -----
    -------- - ----
  -
-

----- ------- ------- ------ -
  ----------------- ---- ------ -
    ----------- -----
    ----------------------------- -- -------
    ---------- - ------
  -
-

----- ------- - --- --------------- --- -----
--------------------- -- ------- - ----- ------- ---- --- ------ --- -

在上面的示例中,Student 类继承了 Person 类,并在其构造函数中使用了 new.target 属性。当我们创建 Student 类的实例时,将首先调用 Person 的构造函数,然后调用 Student 的构造函数。

总结

new.target 属性是 ES11 中的新特性,它提供了一种获取构造函数的引用的方法,而不是实例本身的引用。在构造函数内使用 new.target 属性可以确保在继承时调用正确的构造函数。通过本文的学习,您可以更好地理解并应用 new.target 属性。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/653f4f2c7d4982a6eb8d9ce6

纠错
反馈