function EventEmitter() {
this._events = {};
}
EventEmitter.prototype.on = function (eventName, callback) {
if (!this._events) {
this._events = {}; // EventEmitter被继承时,继承者也可以使用
}
let events = this._events[eventName] || [];
events.push(callback);
this._events[eventName] = events;
};
EventEmitter.prototype.emit = function (eventName, ...args) {
if (!this._events) {
this._events = {};
}
let callbacks = [...this._events[eventName]];
for (
let callback = callbacks.shift();
callback;
callback = callbacks.shift()
) {
callback.call(this, ...args);
}
};
EventEmitter.prototype.once = function (eventName, callback) {
function one(...args) {
callback(...args);
this.off(eventName, one);
}
// 直接off掉once这个事件
one.l = callback;
this.on(eventName, one); // 执行完立即off
};
EventEmitter.prototype.off = function (eventName, callback) {
if (!this._events) this._events = {};
const callbacks = this._events[eventName];
this._events[eventName] = callbacks.filter(
(cb) => cb !== callback && cb.l !== callback
);
};
const event = new EventEmitter();
event.on("example", function () {
console.log("触发了");
});
event.emit("example");
Events
最新推荐文章于 2024-07-18 11:48:33 发布