2012-11-19 31 views
0

我知道我可以使用回調是這樣的:的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){ 

}); 

回答

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

這是在日假定該對象具有可訪問的功能mySuccess功能。

例如:

var foo = (function(){ 

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

})() 
+0

我認爲值得注意的是,除非使用'Function.prototype.bind',否則函數將失去綁定。 –

+0

@RenatoZannon你是什麼意思? – Neal

+0

如果'foo.mySucess'使用'this',當它被稱爲回調函數時,它將是'null'或'window'(而不是'foo')。這是一個常見的問題 –

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 
}); 

請注意,這有很好的副作用接受多個回調。