"static method"上的JavaScript回调



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

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){
});
$.post('handler.ashx', foo.mySuccess);

这是在假设对象具有可访问的mySuccess函数的情况下进行的。

例如:

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

为了维护你的API(用回调调用mySuccess函数,而不是定义它),你可以利用jQuery的承诺/延期:

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

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

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

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

最新更新