在 ECMAScript 2020 中使用 new.target 来保证正确的构造函数调用
在 JavaScript 中,构造函数是一个非常重要的概念。构造函数用于创建对象并对其进行初始化,通常使用 new
关键字调用。在 ECMAScript2020 中,可以使用 new.target 来保证正确的构造函数调用。
构造函数和 new 关键字
在 JavaScript 中,构造函数是一种特殊的函数,用于创建对象。构造函数经常用于创建自定义类型的对象,例如,在一个游戏中,你可能会创建一个名为 Enemy 的自定义类型,用于表示敌人。
当使用关键字 new
来调用构造函数时,JavaScript 会创建一个新对象,并将该对象作为 this 关键字传递给构造函数。在构造函数中,你可以使用 this 关键字来初始化对象属性。构造函数的返回值通常是 undefined,因为构造函数的目的是创建对象而不是返回值。
-------- ----------- ------- - --------- - ----- ----------- - ------- - ----- ----- - --- --------------- ----- ------------------------ -- -------- -------------------------- -- ---
new.target 关键字
在 ECMAScript 2020 中,可以使用 new.target 关键字来保证正确的构造函数调用。new.target 是一个在构造函数内部可用的特殊变量。当使用 new 关键字调用构造函数时,new.target 值为构造函数本身。如果你直接调用构造函数而不使用 new 关键字,则 new.target 值为 undefined。
-------- ----------- ------- - -- ----------- --- ---------- - ----- --- ------------ ---- -- ------ ---- ------ - --------- - ----- ----------- - ------- - ----- ------ - --- --------------- ----- --------------------------- -- --- ----- ------ - --------------- ----- -- ------ ------ ----- ---- -- ------ ---- ---
在这个例子中,我们在构造函数内部使用了 if 语句来检查 new.target 的值。如果值为 undefined,则说明构造函数是直接调用的,而不是通过 new 关键字调用的。因此,我们抛出了一个错误,提示用户必须使用 new 关键字来调用构造函数。
new.target 和继承
new.target 功能不仅限于检查构造函数是否在正确的上下文中调用。它还可以帮助我们在继承中调用正确的超类构造函数。
----- ------ - ----------------- ------ - --------- - ----- ---------- - ------ - - ----- --- ------- ------ - ----------------- - ----------- -------- ---------------------- --- ----- -- ---- - - ----- --- - --- ------------ ----------------------- -- ------
在这个例子中,我们定义了一个超类 Animal 和一个子类 Dog。在 Dog 的构造函数中,我们使用了 super() 来调用超类 Animal 的构造函数。使用 new.target,我们可以确定我们正在调用 Dog 的构造函数并将正确的参数传递给超类 Animal 的构造函数。
总结
在 ECMAScript 2020 中,使用 new.target 可以帮助我们确保正确的构造函数调用,并在继承中正确地调用超类构造函数。虽然 new.target 并不是一个全新的概念,但它是一个有用的特性,可以在构造函数中提高代码的可读性和正确性。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/645f3b61968c7c53b014c42e