关于"静态方法"的javascript回调

时间:2012-11-19 15:27:21

标签: javascript jquery

我知道我可以使用这样的回调:

function foo(mySuccess) {

    $.post('handler.ashx', mySuccess);
}

但在下列情况下我该怎么做:

function foo(){ }

$.post('handler.ashx', function(){

    foo.mySuccess = function(data); //this wont work, but you get the idea
});

然后使用:

调用它
foo.mySuccess(function(data){

});

2 个答案:

答案 0 :(得分:1)

$.post('handler.ashx', foo.mySuccess);

假设对象具有可访问的mySuccess函数。

例如:

var foo = (function(){

    return {
       mySuccess: function(data) {
          console.log(data)
       }
    };

})()

答案 1 :(得分:1)

要维护您的API(使用回调调用mySuccess函数,而不是定义它),您可以利用jQuery's promises/deferreds

var foo = (function() {
  function foo() {};
  foo.mySuccess = $.post("handler.ashx").promise().done;
  return foo;
})();

然后,将其用作foo.mySuccess,如您的示例所示:

foo.mySuccess(function(data) {
  // use data
});

请注意,这有很好的副作用,可以接受多个回调。