2013-05-02 80 views
0

我正在處理一些使用jQuery Countdown plugin的代碼。該插件允許一個回調函數傳遞當倒數降爲零,這將被執行:

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

runSomeAction使用$(this)拿起擊中計時器從0。我想換runSomeAction,但我知道如何做到這一點的唯一方法是將paramenter添加到它,就像這樣:

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

但現在我必須要改變的參數名稱runSomeAction所有$(this)引用。

有沒有辦法將runSomeAction換成$(this)而我不必改變它?

+2

那麼在'runSomeAction'調用中['this' value](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/this)應該是什麼,你的倒數對象文字?來自'onExpiry'回調的'this'? – Bergi 2013-05-02 23:24:32

回答

6

您可以使用callapply javascript函數更改給定函數的this上下文。像這樣的東西應該爲你工作:

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

現在runSomeAction函數中,this將等於$(this)從點函數被調用。

5

我不完全清楚你在做什麼。更多的代碼將清除我的答案。

你應該可以使用jQuery的.proxy(function, context)方法。

根據這是什麼範圍你之後,它要麼是

onExpiry: $.proxy(runSomeAction,this) 

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

你可以在它的代理,如果你想jQuery對象更改爲$(this)

+3

我愛神祕downvotes – epascarello 2013-05-02 23:26:12

+0

他們是最好的。快速的問題 - 在你的第二個例子中,你是否需要立即調用從代理返回的函數?第一個例子對我有意義,但我想知道第二個 – Ian 2013-05-02 23:29:09

+1

啊,是的,你需要給它打電話!固定! [也許那是downvote。大聲笑] – epascarello 2013-05-02 23:30:30