event.js
export default class EventEmitter {
constructor() {
this.events = [];
}
on(eventName, handle) {
if (!this.events[eventName]) {
this.events[eventName] = [];
}
this.events[eventName].push(handle);
}
one(eventName, handle) {
if (!this.events[eventName]) {
this.events[eventName] = [];
}
this.events[eventName] = [handle];
}
once(eventName, handle) {
if (!this.events[eventName]) {
this.events[eventName] = [];
}
this.events[eventName].push(handle);
const eventPrototype = Object.getPrototypeOf(this.events[eventName]);
eventPrototype._once = true;
}
off(eventName) {
delete this.events[eventName];
}
getAll() {
return this.events;
}
emit(eventName, ...args) {
const matchedEvents = this.events[eventName]
if (matchedEvents) {
matchedEvents.forEach((event) => {
event.apply(event, args)
});
if (matchedEvents._once) {
this.off(eventName);
}
}
}
}
来源: https: