只能由新关键字调用的JS函数

时间:2018-07-03 13:09:35

标签: javascript object

我们可以在javascript中创建只能由new关键字调用的函数吗?有人问我如何在javascript中引入这种限制以及有什么用。

如果有人也可以回答使用此限制,将不胜感激。

2 个答案:

答案 0 :(得分:3)

通过new.target属性,您可以检测是否使用new运算符调用了函数或构造函数:

function Foo() {
  if (!new.target) throw 'Foo() must be called with new';
}

try {
  Foo();
} catch(e) {
  console.log(e);
  // expected output: "Foo() must be called with new"
}

这在以后的情况下可能会有所帮助:

  1. 在调用函数Foo()时隐式地将创建新的对象实例,但是使用new关键字-这是显式的。结果代码更易于阅读/使用/维护/等。

  2. 当您需要在创建新对象实例时执行某些特定操作时(仅一次并且仅在创建期间)。

  3. 当您需要执行new关键字在后台执行的所有5 steps,而简单的函数调用将无法执行时。

答案 1 :(得分:1)

ES6 classes实际上是special functions

类需要使用new运算符来创建新实例,例如,在没有new运算符的情况下调用类会导致错误,因为类构造函数需要创建新实例。