index.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. var WILDCARD = '*';
  2. /* event-emitter */
  3. var EventEmitter = /** @class */ (function () {
  4. function EventEmitter() {
  5. this._events = {};
  6. }
  7. /**
  8. * 监听一个事件
  9. * @param evt
  10. * @param callback
  11. * @param once
  12. */
  13. EventEmitter.prototype.on = function (evt, callback, once) {
  14. if (!this._events[evt]) {
  15. this._events[evt] = [];
  16. }
  17. this._events[evt].push({
  18. callback: callback,
  19. once: !!once,
  20. });
  21. return this;
  22. };
  23. /**
  24. * 监听一个事件一次
  25. * @param evt
  26. * @param callback
  27. */
  28. EventEmitter.prototype.once = function (evt, callback) {
  29. return this.on(evt, callback, true);
  30. };
  31. /**
  32. * 触发一个事件
  33. * @param evt
  34. * @param args
  35. */
  36. EventEmitter.prototype.emit = function (evt) {
  37. var _this = this;
  38. var args = [];
  39. for (var _i = 1; _i < arguments.length; _i++) {
  40. args[_i - 1] = arguments[_i];
  41. }
  42. var events = this._events[evt] || [];
  43. var wildcardEvents = this._events[WILDCARD] || [];
  44. // 实际的处理 emit 方法
  45. var doEmit = function (es) {
  46. var length = es.length;
  47. for (var i = 0; i < length; i++) {
  48. if (!es[i]) {
  49. continue;
  50. }
  51. var _a = es[i], callback = _a.callback, once = _a.once;
  52. if (once) {
  53. es.splice(i, 1);
  54. if (es.length === 0) {
  55. delete _this._events[evt];
  56. }
  57. length--;
  58. i--;
  59. }
  60. callback.apply(_this, args);
  61. }
  62. };
  63. doEmit(events);
  64. doEmit(wildcardEvents);
  65. };
  66. /**
  67. * 取消监听一个事件,或者一个channel
  68. * @param evt
  69. * @param callback
  70. */
  71. EventEmitter.prototype.off = function (evt, callback) {
  72. if (!evt) {
  73. // evt 为空全部清除
  74. this._events = {};
  75. }
  76. else {
  77. if (!callback) {
  78. // evt 存在,callback 为空,清除事件所有方法
  79. delete this._events[evt];
  80. }
  81. else {
  82. // evt 存在,callback 存在,清除匹配的
  83. var events = this._events[evt] || [];
  84. var length_1 = events.length;
  85. for (var i = 0; i < length_1; i++) {
  86. if (events[i].callback === callback) {
  87. events.splice(i, 1);
  88. length_1--;
  89. i--;
  90. }
  91. }
  92. if (events.length === 0) {
  93. delete this._events[evt];
  94. }
  95. }
  96. }
  97. return this;
  98. };
  99. /* 当前所有的事件 */
  100. EventEmitter.prototype.getEvents = function () {
  101. return this._events;
  102. };
  103. return EventEmitter;
  104. }());
  105. export default EventEmitter;
  106. //# sourceMappingURL=index.js.map