我有一个 JavaScript 函数,可以直接调用,也可以作为 jQuery 事件的回调。
在后一种情况下,jQuery Event 对象将作为参数传递。当我直接调用该函数时,我还提供了一个参数(不同类型,但仍然是一个对象)。
因此,我需要能够检查(在函数体内)函数是如何被调用的,以便知道它正在处理什么样的参数。
有没有一种简单的方法可以做到这一点?
我有一个 JavaScript 函数,可以直接调用,也可以作为 jQuery 事件的回调。
在后一种情况下,jQuery Event 对象将作为参数传递。当我直接调用该函数时,我还提供了一个参数(不同类型,但仍然是一个对象)。
因此,我需要能够检查(在函数体内)函数是如何被调用的,以便知道它正在处理什么样的参数。
有没有一种简单的方法可以做到这一点?
接受这个论点,然后看看它是否是instanceof
jQuery.Event
:
function yourFunction(e) {
if (e instanceof jQuery.Event) {
// ...it was an event handler call
}
}
不过,我建议避免这种事情。相反,如果您需要根据调用方式来区分行为,我建议让事件处理程序调用目标函数(而不是将目标函数用作实际的事件处理程序)。
根据您对问题的评论:
我简单地尝试的是:直接调用函数时,我在第一个位置使用空值,在第二个位置使用有用的参数。
在这种情况下,它更容易:
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
will be undefined
,这是错误的。(jQuery 传递给处理程序的事件对象永远不会是假的。)
在 if 条件中尝试 typeof() 运算符。如果参数类型相同,您可以尝试在任一情况下为传递的对象/事件分配一个唯一属性,然后再次检查该属性...