我有一个JavaScript函数,可以直接调用,也可以作为jQuery事件的回调。
在后一种情况下,jQuery Event对象将作为参数传递。当我直接调用函数时,我还提供了一个参数(不同类型,但仍然是一个Object)。
因此,我需要能够检查(在函数体内)如何调用函数,以便知道它正在处理什么类型的参数。
有一种简单的方法吗?
答案 0 :(得分:11)
接受参数,然后查看它是instanceof
jQuery.Event
:
function yourFunction(e) {
if (e instanceof jQuery.Event) {
// ...it was an event handler call
}
}
但是,我会建议避免这种事情。相反,我建议让事件处理程序调用目标函数(而不是使用目标函数作为实际的事件处理程序),如果你需要根据它的调用方式区分行为。< / p>
从您对该问题的评论:
我简单的尝试是:当直接调用函数时,我在第一个位置使用空值,在第二个位置使用有用的参数。
在这种情况下,它更容易:
function yourFunction(e) {
if (e) {
// ...it was an event handler call -- or at least,
// a non-falsey argument of some kind was passed in
}
}
您甚至不必将null
传递给函数,只需在没有参数的情况下调用它。当您这样做时,e
将为undefined
,这是假的。 (jQuery传递处理程序的事件对象永远不会是假的。)
答案 1 :(得分:-1)
在if条件中尝试typeof()运算符。如果参数类型相同,您可以尝试在两种情况下分配传递对象/事件的唯一属性,然后再次检查该属性......