1、回调对象$.Callbacks()
创建一个毁掉对象var cb = $.Callbacks();
通过cb.add(fn1);向回调对象里添加一个函数,通过cb.fire()执行cb里面的函数,通过cb.remove(fn1)来移除对象里面的某个函数。
例如:
function aaa(){ alert(1); } function bbb(){ alert(2); } function ccc(){ alert(3); } var cb = $.Callbacks(); cb.add(aaa); cb.add(bbb); cb.fire(); //1,2 cb.add(ccc); cb.remove(aaa); cb.fire(); //2,3
cb.fire();还可以通过加上once memory unique stopOnFalse来到达不同的执行效果,例如:cb.fire('once');表示只执行一次。
2、延迟对象$.Deferred()
用法和对调对象类似,
创建一个延迟对象,var dfd = $.Deferred();
延迟对象的初始状态是pending等待状态,当状态为resolve的时候,就会执行done里面的函数,当状态为reject的时候,就会执行fail里面的函数,例如:
var dfd = $.Deferred(); //dfd延迟对象的初始状态 : pending(等待) setTimeout(function(){ alert(1); //dfd.resolve(); dfd.reject(); },1000); dfd.done(function(){ alert(2); }); dfd.fail(function(){ alert(3); });
jq的ajax中返回的就是延迟对象,可以用done和fail分别替代success和error时的回调,例如:
$.ajax('xxx.php').done(function(){ }).fail(function(){});
$.when( $.ajax('xxx.php') , $.ajax('yyy.php') ).done(function(){}); //当两个请求都成功的时候执行done里面的回调 $.ajax('xxx.php').then(function(){} , function(){});