一、实现1个 EventBus 类,至少拥有on,emit两个方法
class EventBus {
constructor() {
this.msgList = {}
}
on(msgName, fn) {
// 首先判断消息是不是保存过
if (this.msgList.hasOwnProperty(msgName)) {
// 如果存在,看看是不是一个函数
if (typeof this.msgList[msgName] === 'function') {
// 如果是,则变成数组
this.msgList[msgName] = [this.msgList[msgName], fn]
} else {
this.msgList[msgName] = [...this.msgList[msgName], fn]
}
} else {
// 如果消息名称在事件队列里不存在,直接存储
this.msgList[msgName] = fn
}
}
emit(msgName, msg) {
// 先判断消息名称是否存在
if (!this.msgList.hasOwnProperty(msgName)) {
return
}
if (typeof this.msgList[msgName] === 'function') {
// 函数的话直接执行
this.msgList[msgName](msg)
} else {
this.msgList[msgName].map((fn) => {
fn(msg)
})
}
}
off(msgName) {
if (!this.msgList.hasOwnProperty(msgName)) {
return
}
delete this.msgList[msgName];
}
}
// 调⽤参考
const bus = new EventBus();
bus.on('event01', (eventArg) => console.log('event01', eventArg));
bus.emit('event01', 123); //输出:event01 123
Tips:【小程序云开发】中高级前端面试题库(源码:小程序中联系我哟)。
---------- 创作不易,感谢大家,请多多支持!