在JavaScript中重载事件处理程序

Overload event handler in JavaScript

本文关键字:事件处理 程序 重载 JavaScript      更新时间:2023-09-26

我有一个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);

附言:我知道我可以把CCD_ 5部分放在另一个函数&当需要在事件处理程序之外调用它时,但我想知道上面的方法是否有什么问题?

乍一看确实有点奇怪,但我想说没有错。它基本上等同于将一个参数作为可选参数,只是事件处理机制强制您将事件定义为第一个参数,这样您就不能将其作为可选参数。

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

一种让它变得更干净的方法是用一个为此目的而进行的事件参数来调用它。在您的示例中,这将是:

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

在javascript中,nullundefinedfalse都是false,因此if (event)中的event将在这些值通过该参数传递到该函数时求值为false。无论你怎么做都没有错,因为这是一个简单的评估。除非你想在函数中使用nullundefinedfalse做不同的事情(或者有一些情有可原的情况,比如特定的约定、"使用严格的"用法等),否则这无关紧要。

只需将第一个参数设置为false,就可以重用以下函数,正如您所指出的,您可以使用其中的任何一个。

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

他们都会好起来的。但我会用"null",尽管这是主观观点。