可以使用new
关键字调用JavaScript中的任何函数,是否有任何方法可以创建无法使用new
关键字调用的函数。
修改
我只是好奇,如果有可能的话呢?因为我尝试执行new alert()
,警报对我来说就像一个函数,我收到了一个错误。我不知道为什么它发生了警报,如果有任何方法可以实现与JavaScript中的正常功能相同。
答案 0 :(得分:6)
我想你可以对this
执行测试:
function test() {
if (this instanceof test) {
throw new Error('yikes');
}
}
new test(); // yikes!
test();
答案 1 :(得分:1)
不,new
是JS的关键功能之一,您只能使用bind()
更改函数的行为以使用new和不使用new的行为:
function_to_call = function_to_call.bind(your_object);
function_to_call
将始终以your_object
作为上下文。
答案 2 :(得分:1)
有一种解决办法。
function Foo() {
if (this instanceof Foo) {
//Calling with new keyword
console.log("Calling with new keyword");
} else {
//calling without new keyword
console.log("Calling without new keyword");
}
}
我们的想法是检查我们当前是否在函数本身内部,而不是在函数的实例化版本中。
Read more在John Resig的博客上。