如何避免javascript中的函数被新关键字调用

时间:2013-07-05 09:56:22

标签: javascript

可以使用new关键字调用JavaScript中的任何函数,是否有任何方法可以创建无法使用new关键字调用的函数。

修改

我只是好奇,如果有可能的话呢?因为我尝试执行new alert(),警报对我来说就像一个函数,我收到了一个错误。我不知道为什么它发生了警报,如果有任何方法可以实现与JavaScript中的正常功能相同。

3 个答案:

答案 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的博客上。