我们可以在javascript中创建只能由new关键字调用的函数吗?有人问我如何在javascript中引入这种限制以及有什么用。
如果有人也可以回答使用此限制,将不胜感激。
答案 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"
}
这在以后的情况下可能会有所帮助:
在调用函数Foo()
时隐式地将创建新的对象实例,但是使用new
关键字-这是显式的。结果代码更易于阅读/使用/维护/等。
当您需要在创建新对象实例时执行某些特定操作时(仅一次并且仅在创建期间)。
当您需要执行new
关键字在后台执行的所有5 steps,而简单的函数调用将无法执行时。
答案 1 :(得分:1)
ES6 classes实际上是special functions
。
类需要使用new运算符来创建新实例,例如,在没有new运算符的情况下调用类会导致错误,因为类构造函数需要创建新实例。