You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
3.1 KiB
108 lines
3.1 KiB
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var WILDCARD = '*';
|
|
/* event-emitter */
|
|
var EventEmitter = /** @class */ (function () {
|
|
function EventEmitter() {
|
|
this._events = {};
|
|
}
|
|
/**
|
|
* 监听一个事件
|
|
* @param evt
|
|
* @param callback
|
|
* @param once
|
|
*/
|
|
EventEmitter.prototype.on = function (evt, callback, once) {
|
|
if (!this._events[evt]) {
|
|
this._events[evt] = [];
|
|
}
|
|
this._events[evt].push({
|
|
callback: callback,
|
|
once: !!once,
|
|
});
|
|
return this;
|
|
};
|
|
/**
|
|
* 监听一个事件一次
|
|
* @param evt
|
|
* @param callback
|
|
*/
|
|
EventEmitter.prototype.once = function (evt, callback) {
|
|
return this.on(evt, callback, true);
|
|
};
|
|
/**
|
|
* 触发一个事件
|
|
* @param evt
|
|
* @param args
|
|
*/
|
|
EventEmitter.prototype.emit = function (evt) {
|
|
var _this = this;
|
|
var args = [];
|
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
args[_i - 1] = arguments[_i];
|
|
}
|
|
var events = this._events[evt] || [];
|
|
var wildcardEvents = this._events[WILDCARD] || [];
|
|
// 实际的处理 emit 方法
|
|
var doEmit = function (es) {
|
|
var length = es.length;
|
|
for (var i = 0; i < length; i++) {
|
|
if (!es[i]) {
|
|
continue;
|
|
}
|
|
var _a = es[i], callback = _a.callback, once = _a.once;
|
|
if (once) {
|
|
es.splice(i, 1);
|
|
if (es.length === 0) {
|
|
delete _this._events[evt];
|
|
}
|
|
length--;
|
|
i--;
|
|
}
|
|
callback.apply(_this, args);
|
|
}
|
|
};
|
|
doEmit(events);
|
|
doEmit(wildcardEvents);
|
|
};
|
|
/**
|
|
* 取消监听一个事件,或者一个channel
|
|
* @param evt
|
|
* @param callback
|
|
*/
|
|
EventEmitter.prototype.off = function (evt, callback) {
|
|
if (!evt) {
|
|
// evt 为空全部清除
|
|
this._events = {};
|
|
}
|
|
else {
|
|
if (!callback) {
|
|
// evt 存在,callback 为空,清除事件所有方法
|
|
delete this._events[evt];
|
|
}
|
|
else {
|
|
// evt 存在,callback 存在,清除匹配的
|
|
var events = this._events[evt] || [];
|
|
var length_1 = events.length;
|
|
for (var i = 0; i < length_1; i++) {
|
|
if (events[i].callback === callback) {
|
|
events.splice(i, 1);
|
|
length_1--;
|
|
i--;
|
|
}
|
|
}
|
|
if (events.length === 0) {
|
|
delete this._events[evt];
|
|
}
|
|
}
|
|
}
|
|
return this;
|
|
};
|
|
/* 当前所有的事件 */
|
|
EventEmitter.prototype.getEvents = function () {
|
|
return this._events;
|
|
};
|
|
return EventEmitter;
|
|
}());
|
|
exports.default = EventEmitter;
|
|
//# sourceMappingURL=index.js.map
|