2009-08-24 113 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.