ES12 中语句 new.target

在 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


纠错反馈