```//极简全局evtbus实现
function evtBus() {
this.evt = new Map();
}
//注册事件
evtBus.prototype.on = function(keys, fn) {
const { evt } = this;
Array.isArray(keys) || (keys = [keys]);
keys.forEach(key => {
(evt.has(key) && evt.get(key).push(fn)) || evt.set(key, [fn]);
});
};
//发送事件
evtBus.prototype.emit = function(key, ...data) {
const arr = this.evt.get(key);
arr && arr.forEach(fn => fn(...data));
};
//移除事件
evtBus.prototype.off = function(keys) {
const { evt } = this;
if (!keys) {
return evt.clear();
}
if (Array.isArray(keys)) {
return keys.forEach(key => evt.delete(key));
}
evt.delete(keys);
};
//调用一次移除
evtBus.prototype.once = function(key, fn) {
let onceFn = (...data) => {
this.off(key);
fn(...data);
};
this.on(key, onceFn);
};
export const bus = new evtBus();