如何创建不能用作构造函数的函数

时间:2019-04-09 06:18:36

标签: javascript

我正在尝试在javascript中创建一个不能以构造函数形式调用的函数,就像让我们说函数是否为function SomeFunction(){}一样,在调用new SomeFunction()之类的函数时,它应该引发异常,但在没有新的应该可以。

有没有办法做到这一点?

3 个答案:

答案 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()