在 ES12 中,新加入了语句 new.target
,其作用是返回当前实例化函数的函数对象,用于判断是否使用 new
关键字。
用途
在一些场合下,我们需要判断当前函数是否使用了 new
关键字。比如,我们希望保证构造函数只能通过 new
进行实例化,如果不使用 new
关键字,就会抛出错误。
function MyConstructor() { if (!new.target) { throw new Error("MyConstructor must be called with new keyword"); } // 构造函数的其他代码 }
此时,如果我们直接调用 MyConstructor()
,就会抛出错误,提示必须使用 new
关键字进行实例化。
示例代码
class Animal { constructor() { console.log(new.target.name); } } class Dog extends Animal { constructor() { super(); } } let a = new Animal(); // Animal let d = new Dog(); // Dog
在上述示例代码中,new.target
返回的是当前类的构造函数对象,我们可以通过 name
属性输出类名,这就是 new.target
的一个用途。
指导意义
new.target
的使用可以提高代码的可读性和可维护性,尤其在构造函数中使用非常方便。使用 new.target
可以很容易地判断是否使用了 new
关键字,从而避免一些潜在的问题和错误。
需要注意的是,new.target
语句不能在普通函数内部使用,只能在构造函数、静态方法和类的原型方法中使用。
总结
本文详细介绍了 ES12 中的新语句 new.target
,包括其用途、示例代码和指导意义。使用 new.target
可以提高代码的可读性和可维护性,尤其在构造函数中使用非常方便。需要注意的是,new.target
语句不能在普通函数内部使用,只能在构造函数、静态方法和类的原型方法中使用。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a28567add4f0e0ffaa55ea