JavaScript中的任何函数都可以使用new
关键字调用,有没有办法创建一个不能用new
关键字调用的函数。
编辑
我只是好奇,如果有可能做到吗?由于我尝试执行new alert()
,警报对我来说看起来像是一个函数,所以我遇到了一个错误。我不知道为什么会发生警报,以及是否有任何方法可以使用 JavaScript 中的普通函数实现相同的功能。
JavaScript中的任何函数都可以使用new
关键字调用,有没有办法创建一个不能用new
关键字调用的函数。
编辑
我只是好奇,如果有可能做到吗?由于我尝试执行new alert()
,警报对我来说看起来像是一个函数,所以我遇到了一个错误。我不知道为什么会发生警报,以及是否有任何方法可以使用 JavaScript 中的普通函数实现相同的功能。
我想您可以对以下内容进行测试this
:
function test() {
if (this instanceof test) {
throw new Error('yikes');
}
}
new test(); // yikes!
test();
不,new
这是 JS 的关键特性之一,您只能更改函数的行为,使其与 new 和没有 new using 的行为相同bind()
:
function_to_call = function_to_call.bind(your_object);
function_to_call
将始终your_object
作为上下文。
有一个解决方法。
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");
}
}
这个想法是检查我们当前是否在函数本身内部,而不是在函数的实例化版本中。
在 John Resig 的博客上阅读更多内容。