ssocket-js
Version:
仿 Koa 中间件控制的 WebSocket 服务的 Web 客户端程序
93 lines (92 loc) • 2.39 kB
JavaScript
"use strict";
/*
* @Author: Summer
* @LastEditors: Summer
* @Description: 事件管理对象
* @LastEditTime: 2021-01-22 13:08:12 +0800
* @FilePath: \ssocket-js\src\emitter.ts
*/
Object.defineProperty(exports, "__esModule", { value: true });
var Emitter = /** @class */ (function () {
function Emitter() {
/**
* 事件列表
*/
this._callbacks = {};
}
/**
* 绑定一个事件
* @param event
* @param fn
*/
Emitter.prototype.on = function (event, fn) {
(this._callbacks[event] = this._callbacks[event] || []).push(fn);
return this;
};
/**
* 删除所有的事件
*/
Emitter.prototype.removeAllListeners = function () {
this._callbacks = {};
return this;
};
/**
* 删除一个事件,或者一组事件函数
* @param event
* @param fn
*/
Emitter.prototype.off = function (event, fn) {
var callbacks = this._callbacks[event];
if (!callbacks)
return this;
if (!fn) {
delete this._callbacks[event];
return this;
}
var cb;
for (var i = 0; i < callbacks.length; i++) {
cb = callbacks[i];
if (cb === fn || cb.fn === fn) {
callbacks.splice(i, 1);
break;
}
}
return this;
};
/**
* 绑定一个一次性的事件,该事件在触发一次后自动删除
* @param event
* @param fn
*/
Emitter.prototype.once = function (event, fn) {
var self = this;
function on() {
self.off(event);
fn.apply(this, arguments);
}
on.fn = fn;
this.on(event, on);
return this;
};
/**
* 触发一次事件
* @param event
* @param args
*/
Emitter.prototype.emit = function (event) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
var callbacks = this._callbacks[event];
if (callbacks) {
callbacks = callbacks.slice(0);
for (var i = 0, len = callbacks.length; i < len; ++i) {
callbacks[i].apply(this, args);
}
}
return this;
};
return Emitter;
}());
exports.default = Emitter;