4

我有一个 JavaScript 函数,可以直接调用,也可以作为 jQuery 事件的回调。

在后一种情况下,jQuery Event 对象将作为参数传递。当我直接调用该函数时,我还提供了一个参数(不同类型,但仍然是一个对象)。

因此,我需要能够检查(在函数体内)函数是如何被调用的,以便知道它正在处理什么样的参数。

有没有一种简单的方法可以做到这一点?

4

2 回答 2

11

接受这个论点,然后看看它是否是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函数,只需不带参数调用它即可。当你这样做时,ewill be undefined,这是错误的。(jQuery 传递给处理程序的事件对象永远不会是假的。)

于 2013-02-13T12:03:23.367 回答
-1

在 if 条件中尝试 typeof() 运算符。如果参数类型相同,您可以尝试在任一情况下为传递的对象/事件分配一个唯一属性,然后再次检查该属性...

于 2013-02-13T12:02:59.587 回答