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

 

posted on 2015-08-23 19:19  toodeep  阅读(488)  评论(0编辑  收藏  举报