📜  JavaScript new.target 元属性(1)

📅  最后修改于: 2023-12-03 14:42:25.968000             🧑  作者: Mango

JavaScript new.target 元属性

在 JavaScript 中,有一个特殊的元属性 new.target,它返回构造函数、类或派生类被调用时的 new 关键字。这个元属性很有用,因为它能够让你知道使用了 new 关键字来调用某个函数。

用法

new.target 可以在任何地方使用,但通常是在构造函数、类或派生类内部使用。在这些函数中,new.target 判断调用方式是否是 new,并相应地执行不同的代码。

例如,在构造函数中,可以使用 new.target 创建一个新的实例:

class Foo {
  constructor() {
    if (!new.target) {
      throw 'Foo must be called with the new operator';
    }
    console.log('Foo instantiated with new');
  }
}

new Foo();
// Output: Foo instantiated with new

Foo();
// Output: Foo must be called with the new operator

如上例所示,如果没有使用 new 关键字调用 Foo,则抛出一条错误信息。

实现细节

如果函数没有被 new 调用,new.target 将是 undefined。否则,它将是构造函数本身。

在派生类中使用 new.target 时,它将是派生类的构造函数,而不是基类的构造函数。

class Animal {
  constructor() {
    console.log(new.target.name + ' constructed');
  }
}

class Cat extends Animal {
  constructor() {
    super();
  }
}

new Animal();
// Output: Animal constructed

new Cat();
// Output: Cat constructed

如上例所示,new.target.name 可以返回构造函数的名称。

总结

new.target 是一个很有用的元属性,它可以帮助你判断函数的调用方式,进而执行不同的代码。如果你还没有在你的代码中使用 new.target,那么建议你尝试一下。