JavaScript中的重载事件处理程序

tzdcorbm  于 2023-04-10  发布在  Java
关注(0)|答案(3)|浏览(104)

我想重载一个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部分放在另一个函数中,并在需要时在事件处理程序之外调用它,但我想知道上述方法是否有什么问题?
v9tzhpje

v9tzhpje1#

乍看之下确实有点奇怪,但我会说没有什么错。它基本上等同于将参数作为可选参数,除了事件处理机制强制您将事件定义为第一个参数,因此您不能将其设置为可选参数。
为了使它尽可能接近一个可选参数,当调用它时,我会将事件设置为undefined,而不是作为事件处理程序,因为这是如果它是一个可选参数的值。我想null也可以,但我认为false在语义上是错误的:你想说没有事件,而不是说事件是假的。
有一种方法可以使它更简洁,那就是使用一个事件参数来调用它。在你的例子中,这将是:

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

2wnc66cl2#

在javascript中,nullundefinedfalse都是false,因此只要通过该参数将这些值传递到该函数中,if (event)中的event就会求值为false。无论如何都没有错,因为它是简单的求值。除非你想对nullundefined做不同的事情,否则if (event)中的event将求值为false。或者false(或者有特殊的情况,比如特定的约定,“use strict”用法等),这并不重要。

o7jaxewo

o7jaxewo3#

你可以通过设置第一个参数为false来重用下面的函数,正如你指出的,你可以使用任何一个参数。

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

所有的都可以,但我会用“空”,尽管这是主观意见。

相关问题