ECMAScript 2018(ES9)New.target 详解及使用注意事项

阅读时长 3 分钟读完

概述

ECMAScript 2018(ES9)是 JavaScript 语言的最新标准,其中引入了一个新的关键字 new.target,用于在构造函数中判断是否使用了 new 关键字实例化对象。本文将详细介绍 new.target 的用法和注意事项,以及如何在实际开发中使用它。

使用方法

在构造函数中,可以通过 new.target 来判断是否使用了 new 关键字实例化对象。如果使用了 new,则 new.target 的值为构造函数本身;如果没有使用 new,则 new.target 的值为 undefined。例如:

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

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

在上面的例子中,如果没有使用 new 关键字实例化 Person 对象,则会抛出一个错误。

注意事项

使用 new.target 时需要注意以下几点:

  1. new.target 只能在构造函数中使用,不能在普通函数中使用。
  2. new.target 只在直接调用构造函数时才有值,如果是通过 callapply 方法调用构造函数,new.target 将为 undefined
  3. new.target 不是一个全局变量,而是一个在当前函数作用域中的特殊变量,因此不能在函数外部使用。
  4. new.target 可以被子类继承,子类中的 new.target 将指向子类本身。

示例代码

下面是一个示例代码,演示了如何在实际开发中使用 new.target

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

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

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

在上面的例子中,如果直接实例化 Animal 对象,则会抛出一个错误。而 Cat 类继承了 Animal 类,并在构造函数中调用了 super() 方法,因此在实例化 Cat 对象时,会先输出 "Animal instantiated with new",然后再输出 "Cat instantiated with new"

结论

new.target 是 ECMAScript 2018(ES9)中引入的一个新关键字,用于在构造函数中判断是否使用了 new 关键字实例化对象。使用 new.target 可以帮助开发者编写更加健壮的代码,避免在没有使用 new 关键字实例化对象时出现错误。在实际开发中,开发者可以根据需要使用 new.target,从而提高代码的可靠性和可维护性。

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

纠错
反馈