index.js 3.1 KB

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