ascor
Version:
一些常用的简单的js工具
75 lines (74 loc) • 2.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EventEmitter = void 0;
var EventEmitter = /** @class */ (function () {
function EventEmitter() {
this.eventCallback = {};
}
/**
* 添加事件
* @param event 事件名称,字符串
* @param cb 事件回调函数
* @returns EventEmitter
*/
EventEmitter.prototype.on = function (event, cb) {
var callbackList = this.eventCallback[event] || [];
callbackList.push(cb);
this.eventCallback[event] = callbackList;
return this;
};
/**
* 取消监听事件
* @param event 事件名称
* @param cb 事件回调函数,不传则取消所有
* @returns
*/
EventEmitter.prototype.off = function (event, cb) {
if (!cb) {
this.eventCallback[event] = [];
return this;
}
var callbackList = this.eventCallback[event] || [];
this.eventCallback[event] = callbackList.filter(function (fn) { return fn !== cb; });
return this;
};
/**
* 发送事件
* @param event 事件名称,字符串
* @param args 触发时间传递的参数
* @returns
*/
EventEmitter.prototype.emit = function (event) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
var callbackList = this.eventCallback[event] || [];
callbackList.forEach(function (fn) {
fn.apply(void 0, args);
});
return this;
};
/**
* 仅触发一次事件,执行完后自动去掉监听
* @param event 事件名称
* @param cb 回调函数
* @returns
*/
EventEmitter.prototype.once = function (event, cb) {
var _this = this;
// 封装一个单次执行函数
var fn = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
cb.apply(_this, args);
_this.off(event, fn);
};
this.on(event, fn);
return this;
};
return EventEmitter;
}());
exports.EventEmitter = EventEmitter;