概述
ECMAScript 2018(ES9)是 JavaScript 语言的最新标准,其中引入了一个新的关键字 new.target
,用于在构造函数中判断是否使用了 new
关键字实例化对象。本文将详细介绍 new.target
的用法和注意事项,以及如何在实际开发中使用它。
使用方法
在构造函数中,可以通过 new.target
来判断是否使用了 new
关键字实例化对象。如果使用了 new
,则 new.target
的值为构造函数本身;如果没有使用 new
,则 new.target
的值为 undefined
。例如:
-- -------------------- ---- ------- -------- -------- - -- ------------- - ----- --- ------------- ---- -- ------------ ---- ------ - ------------------- ------------ ---- ------ - --- --------- -- -- ------- ------------ ---- ---- --------- -- -- ------- ---- -- ------------ ---- ---- ---
在上面的例子中,如果没有使用 new
关键字实例化 Person
对象,则会抛出一个错误。
注意事项
使用 new.target
时需要注意以下几点:
new.target
只能在构造函数中使用,不能在普通函数中使用。new.target
只在直接调用构造函数时才有值,如果是通过call
或apply
方法调用构造函数,new.target
将为undefined
。new.target
不是一个全局变量,而是一个在当前函数作用域中的特殊变量,因此不能在函数外部使用。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