创建我自己的回调

时间:2009-08-24 15:55:22

标签: javascript jquery

我有一个包含jQuery的页面,以及一个单独的非jQuery函数。

目前我的函数运行在$(document).ready上,但我想在函数完成后立即调用jQuery函数。我可以将我的函数作为回调函数传递给任何jQuery函数,但是如何设置反过来呢?

所以我最好知道如何创建一个函数foo来处理这个问题:

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

或如何扩展现有函数来处理回调。感谢。

3 个答案:

答案 0 :(得分:6)

定义您的函数以接受(可选)回调,如果回调存在,则使用javascript call()apply()方法。要保留上下文,请将this(或您想要的任何上下文)的当前值传递给apply方法。 Call()和apply()根据参数的传递方式而不同。

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

答案 1 :(得分:2)

您所要做的就是创建自定义方法以接受另一个变量......在本例中为函数引用。

如果你有这样的事情:

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

要添加回调,您需要将其更改为:

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

(非常糟糕的例子,但它得到了重点)

答案 2 :(得分: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.