我正在处理一些使用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)
而我不需要更改它?
答案 0 :(得分:6)
您可以使用call或apply 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)
。