在javascript中重载事件处理程序

时间:2014-04-20 14:44:23

标签: javascript javascript-events

我在javascript中有一个我想要重载的事件处理程序:

function overloadedHandler(event, myObject){
    if(event){
        var elem = event.currentTarget;
    } else {
        var elem = myObject.x;
    }
    //function logic
}

$('.mydiv').on('click', overloadedHandler);

如果我想从另一个函数(而不是事件处理程序)调用overloadedHandler,那么正确的方法是什么?

1. overloadedHandler(null, obj);
2. overloadedHandler(undefined, obj);
3. overloadedHandler(false, obj);

P.S。我知道我可以将//function logic部分放在另一个功能中。在事件处理程序之外需要时调用,但我想知道上述方法是否有任何问题?

3 个答案:

答案 0 :(得分:1)

确实,乍一看似乎有点奇怪,但我会说没有错。它基本上等同于将参数作为可选参数,除了事件处理机制强制您将事件定义为第一个参数,因此您无法使其成为可选参数。

为了使它尽可能接近可选参数,我将事件设置为undefined,而不是将其作为事件处理程序调用,因为如果它是一个可选参数,那么它就是值。我想null也可以,但我认为false在语义上是错误的:你想说没有事件,而不是事件是假的。

使它变得更干净的一种方法是使用为此目的制作的事件参数来调用它。在您的示例中,那将是:

overloadedHandler({currentTarget: obj.x}, obj);

答案 1 :(得分:1)

在javascript中,nullundefinedfalse都是假的,因此event中的if (event)会在这些值传递到任何时候评估为false该功能通过该参数。你做任何事都没有错,因为这是简单的评估。除非您想在函数中使用nullundefinedfalse执行不同的操作(或者存在类似特定约定的情有可原的情况,'使用严格的'用法等),否则它不会太重要了。

答案 2 :(得分:0)

你可以通过设置某个东西是假的第一个参数来重用以下函数,正如你所指出的那样,你可以使用其中的任何一个。

overloadedHandler(null, obj);
overloadedHandler(undefined, obj);
overloadedHandler(false, obj);

所有这些都没关系。但我会使用'null',虽然这是主观意见。