揭开web前端的面纱

jQuery中回调对象

2017-03-01  本文已影响22人  ferrint

关键词:回调对象

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

参数

  • 'once':只触发一次

方法

例子:

    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

和想象的一样,报错了,那怎么办呢,这是个匿名函数,又不能用闭包。
这时候我们可以用延迟对象了

 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之后打印出来,即使设为0s也无济于事,这是js的执行顺序决定的,那我们现在这样做:

  var call = $.Callbacks();

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

这样我们就可以按照自己想要的顺序执行了

上一篇下一篇

猜你喜欢

热点阅读