我想重载一个JavaScript中的事件处理程序:
function overloadedHandler(event, myObject){
if(event){
var elem = event.currentTarget;
} else {
var elem = myObject.x;
}
//function logic
}
$('.mydiv').on('click', overloadedHandler);
如果我想从另一个函数调用overloadedHandler
(不是作为事件处理程序),正确的方法是什么?
overloadedHandler(null, obj);
overloadedHandler(undefined, obj);
overloadedHandler(false, obj);
P.S.我知道我可以把//function logic
部分放在另一个函数中,并在需要时在事件处理程序之外调用它,但我想知道上述方法是否有什么问题?
3条答案
按热度按时间v9tzhpje1#
乍看之下确实有点奇怪,但我会说没有什么错。它基本上等同于将参数作为可选参数,除了事件处理机制强制您将事件定义为第一个参数,因此您不能将其设置为可选参数。
为了使它尽可能接近一个可选参数,当调用它时,我会将事件设置为
undefined
,而不是作为事件处理程序,因为这是如果它是一个可选参数的值。我想null
也可以,但我认为false
在语义上是错误的:你想说没有事件,而不是说事件是假的。有一种方法可以使它更简洁,那就是使用一个事件参数来调用它。在你的例子中,这将是:
2wnc66cl2#
在javascript中,
null
、undefined
和false
都是false,因此只要通过该参数将这些值传递到该函数中,if (event)
中的event
就会求值为false。无论如何都没有错,因为它是简单的求值。除非你想对null
、undefined
做不同的事情,否则if (event)
中的event
将求值为false。或者false
(或者有特殊的情况,比如特定的约定,“use strict”用法等),这并不重要。o7jaxewo3#
你可以通过设置第一个参数为false来重用下面的函数,正如你指出的,你可以使用任何一个参数。
所有的都可以,但我会用“空”,尽管这是主观意见。