包装使用$(this)的函数

时间:2013-05-02 23:04:05

标签: javascript jquery

我正在处理一些使用jQuery Countdown plugin的代码。该插件允许传递回调函数,该函数将在倒计时到达零时执行:

{
    until: new Date(remaining),
    onExpiry: runSomeAction
}

runSomeAction使用$(this)来获取达到零的计时器。我想包装runSomeAction,但我知道如何做的唯一方法就是添加一个参数,如下所示:

{
    until: new Date(remaining),
    onExpiry: function() {
        // my logic here...
        runSomeAction($(this));
    }
}

但现在我必须将$(this)中的所有runSomeAction引用更改为参数名称。

有没有办法包裹runSomeAction以便它可以继续使用$(this)而我不需要更改它?

2 个答案:

答案 0 :(得分:6)

您可以使用callapply javascript函数更改给定函数的this上下文。这样的事情对你有用:

onExpiry: function() {
    // my logic here...
    runSomeAction.call($(this));
}

现在在runSomeAction函数中,this将从调用函数的点开始等于$(this)

答案 1 :(得分:5)

我不清楚你在追求什么。更多代码可以解决我的问题。

您应该能够使用jQuery的.proxy( function, context )方法。

根据您所使用的范围,它可能是

onExpiry: $.proxy(runSomeAction,this)

onExpiry: function() { runSomeAction.call(this); }

如果您需要jQuery对象,可以将其更改为代理中的$(this)