2009-08-24 161 views
3

我有一些jQuery的一個頁面,和一個獨立的非jQuery函數。創建我自己的回調

目前我在功能$(文件)。就緒運行,但我想只要我的函數執行完畢調用jQuery的功能。我可以將我的函數作爲回調函數傳遞給任何jQuery函數,但是我怎樣才能設置相反的方式?

所以我會非常想知道如何創建一個函數foo,將照顧這對我來說:

$(document).ready(function() { 
    foo(myfunction(), $(bar).something); 
} 

或如何擴展現有的功能來處理回調。謝謝。

回答

6

定義您的函數以接受(可選)回調,如果回調存在,則使用javascript call()apply()方法。要保留上下文,請將當前值this(或任何您想要的上下文)傳遞給apply方法。 Call()和apply()根據參數的傳遞方式而有所不同。

function myfunction(callback) { 
    // do stuff 
    if (callback) 
     callback.apply(this); 
} 
2

所有你需要做的就是創建自定義的方法來接受另一個變量......在這種情況下,一個函數引用。

如果你有這樣的事情:

var add = function(a, b){ 
    return a+b; 
}; 

要添加一個回調,你會改成這樣:

var add = function(a, b, callback){ 
    callback(); 
    return a+b; 
}; 

(極差的例子,但它橫跨得到點)

+1

使用jQuery做這個足夠長的時間,你會發現,失去的情況下(這)將成爲一個真正的問題。 – tvanfosson 2009-08-24 16:08:44

2

有關功能包裝是什麼:

Function.prototype.appendCallback = function(callback){ 
    var fn = this; 
    return function(){ 
    fn.apply(this, arguments); // execute original function 
    callback.call(this);   // then the callback 
    }; 
}; 

例子:

var newConfirm = window.confirm.appendCallback(function() { 
    alert('after from callback'); 
}); 

newConfirm('hello?'); // shows a confirmation, and then executes the callback.