jQuery中回調(diào)對象

關(guān)鍵詞:回調(diào)對象

語法:
var call = $.Callbacks('once','memory','unique','stopOnFalse');

參數(shù)

  • 'once':只觸發(fā)一次
  • 'memory':有記憶功能
  • 'unique':去除重發(fā)的添加
  • 'stopOnFalse':當函數(shù)return false時候不執(zhí)行

方法

  • add();
  • remove();
  • fire(); 執(zhí)行

例子:

    function fn1() {
        console.dir("f1")
    }
    function fn2() {
        console.dir("f2")
    }
    function fn3() {
        console.dir("f3")
    }

    var call = $.Callbacks('once','memory','unique','stopOnFalse');
    call.add(fn1);
    call.add(fn1);
    call.add(fn2);
    call.fire();  // 
    call.add(fn3);
    call.remove(fn1);
    call.fire();  // 

說完了使用方法,那有什么用呢?

    function a(){
        console.log(1);
    }
    (function(){
        function b(){
    console.log(2);     
    }
    call.add(b);    
    })()
    a();  //1
    b();  // not defined

和想象的一樣,報錯了,那怎么辦呢,這是個匿名函數(shù),又不能用閉包。
這時候我們可以用延遲對象了

 var call = $.Callbacks();
   (function(){
       function b(){
   console.log(2);     
   }
   call.add(b);    
   })()
   a();  //1
   // b();  // not defined
   call.fire();  //2

沒錯,就這么簡單!

再來一個

  setTimeout(function(){
        console.log('setTimeout');
    },0)
  console.log('global');

setTimeout會在global之后打印出來,即使設(shè)為0s也無濟于事,這是js的執(zhí)行順序決定的,那我們現(xiàn)在這樣做:

  var call = $.Callbacks();

    setTimeout(function(){
        console.log('setTimeout');
        call.fire();
    },1000)
    
  call.add(function () {
    console.log('global'); 
  })

這樣我們就可以按照自己想要的順序執(zhí)行了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容