1

JavaScript中的任何函数都可以使用new关键字调用,有没有办法创建一个不能用new关键字调用的函数。

编辑

我只是好奇,如果有可能做到吗?由于我尝试执行new alert(),警报对我来说看起来像是一个函数,所以我遇到了一个错误。我不知道为什么会发生警报,​​以及是否有任何方法可以使用 JavaScript 中的普通函数实现相同的功能。

4

3 回答 3

6

我想您可以对以下内容进行测试this

function test() {
    if (this instanceof test) {
        throw new Error('yikes');
    }
}

new test(); // yikes!
test();
于 2013-07-05T10:05:51.323 回答
1

不,new这是 JS 的关键特性之一,您只能更改函数的行为,使其与 new 和没有 new using 的行为相同bind()

function_to_call = function_to_call.bind(your_object);

function_to_call将始终your_object作为上下文。

于 2013-07-05T09:58:43.730 回答
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");
    }
}

这个想法是检查我们当前是否在函数本身内部,而不是在函数的实例化版本中。

在 John Resig 的博客上阅读更多内容。

于 2013-07-05T10:03:07.013 回答