Advertisement
Guest User

Untitled

a guest
Sep 29th, 2016
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.44 KB | None | 0 0
  1. ;(function(window) {
  2. 'use strict';
  3.  
  4. function Observer() {
  5. this._listeners = {};
  6.  
  7. if (arguments.length) {
  8. this.on.apply(this, arguments);
  9. }
  10. }
  11.  
  12. Observer.prototype = {
  13. on: function(name, handler, isOnce) {
  14. var handlers = this._listeners[name],
  15. that = this,
  16. isAlreadyOn = false,
  17. handlerItem = {
  18. handler: handler,
  19. isOnce: !!isOnce
  20. };
  21.  
  22. if (handlers) {
  23. isAlreadyOn = handlers.some(function(item) {
  24. return item.handler === handlerItem.handle;
  25. });
  26.  
  27. !isAlreadyOn && handlers.push(handlerItem);
  28. } else{
  29. this._listeners[name] = [handlerItem];
  30. }
  31. },
  32.  
  33. one: function(name, handler) {
  34. var args = [].slice.call(arguments);
  35. args.push(true);
  36. this.on.apply(this, args);
  37. },
  38.  
  39. off: function(name, handler) {
  40. var handlers = this._listeners[name],
  41. that = this,
  42. index;
  43.  
  44. if (!handlers) return;
  45. if (handler) {
  46. index = handlers.findIndex(function(item) {
  47. return item.handler === handler;
  48. });
  49.  
  50. if (index > -1) {
  51. handlers.splice(index, 1);
  52. handlers.length === 0 && deleteListener();
  53. }
  54. } else {
  55. deleteListener();
  56. }
  57.  
  58. function deleteListener() {
  59. delete that._listeners[name];
  60. }
  61. },
  62.  
  63. fire: function(name, data) {
  64. var handlers = this._listeners[name],
  65. that = this;
  66.  
  67. if (handlers) {
  68. handlers.forEach(function(item) {
  69. item.handler.call(this, {
  70. type: name,
  71. data: data
  72. });
  73.  
  74. if (item.isOnce) {
  75. that.off(name, item.handler);
  76. }
  77. });
  78. }
  79. }
  80. };
  81.  
  82. Observer._listeners = {};
  83. for (var key in Observer.prototype) {
  84. Observer[key] = Observer.prototype[key];
  85. }
  86.  
  87. window.Observer = Observer;
  88. })(window);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement