3-7 默认回调对象设计
本节编程练习不计算学习进度,请电脑登录imooc.com操作

默认回调对象设计

不传入任何参数,调用add的时候将函数add到内部的list中,调用fire的时候顺序触发list中的回调函数:

function fn1(val) {
  console.log('fn1 says:' + val);
}

function fn2(val) {
  console.log('fn2 says ' + val);
}
var cbs = $.Callbacks();
cbs.add(fn1);
cbs.fire('foo');
console.log('........')
cbs.add(fn2);
cbs.fire('bar')

结果就是按照顺序叠加触发,如下列表:

fn1 says:foo 
………………………
fn1 says:bar 
fn2 says bar

这种就是最简单的处理了,可以直接模拟,代码如下:

function Callbacks() {
  var list = [];
  var self;
  self = {
    add: function(fn) {
      list.push(fn)
    },
    fire: function(args) {
      list.forEach(function(fn) {
        fn(args);
      })
    }
  }
  return self;
}

任务

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <script src="http://img1.sycdn.imooc.com//down/540812440001e40e00000000.js" type="text/javascript"></script>
  6. <script src="http://img1.sycdn.imooc.com//down/541f6ff70001a0a500000000.js" type="text/javascript"></script>
  7.  
  8. <title></title>
  9. </head>
  10. <body>
  11.  
  12. <script type="text/javascript">
  13.  
  14.  
  15. function Callbacks() {
  16. var list = [];
  17. var self;
  18. self = {
  19. add: function(fn) {
  20. list.push(fn)
  21. },
  22. fire: function(args) {
  23. list.forEach(function(fn) {
  24. fn(args);
  25. })
  26. }
  27. }
  28. return self;
  29. }
  30.  
  31. function fn1(val) {
  32. show('fn1 says:' + val);
  33. }
  34. function fn2(val) {
  35. show('fn2 says ' + val);
  36. }
  37.  
  38. var cbs = Callbacks();
  39. cbs.add(fn1);
  40. cbs.fire('foo');
  41. cbs.add(fn2);
  42. cbs.fire('bar')
  43.  
  44.  
  45.  
  46. </script>
  47.  
  48. </body>
  49. </html>
下一节