我正在尝试在javascript中创建一个不能以构造函数形式调用的函数,就像让我们说函数是否为function SomeFunction(){}
一样,在调用new SomeFunction()
之类的函数时,它应该引发异常,但在没有新的应该可以。
有没有办法做到这一点?
答案 0 :(得分:2)
使用new.target
。这是一个特殊属性,在将该函数称为构造函数时设置。请参见以下示例。
function test() {
if (new.target) {
throw new Error('Can not call as constructor');
}
return 'test';
}
console.log(test());
console.log(new test());
答案 1 :(得分:2)
您也可以为此使用es6箭头=>
函数,因为不允许将它们用作构造函数。
let SomeFunction = ()=>{ console.log("called");}
SomeFunction();
//Error for arrow function
new SomeFunction();
答案 2 :(得分:1)
构造函数调用将创建一个实例,因此您可以检查是否未创建实例。
function SomeFunction () {
if(this instanceof SomeFunction)
throw('constructor called');
console.log('function called')
}
SomeFunction();
new SomeFunction()