学习笔记,简要记录一下。
适用场景
监听事件的位置和触发事件的位置不受限,可以用于任意组件间的通信。Vue 中的 EventBus 就是一个典型应用。
实现思路
- 处理事件和监听函数的对应关系 —— 用对象(eventMap)存储事件和处理函数的映射关系
- 实现事件订阅 —— 往 eventMap 写入事件处理函数
- 实现事件发布 —— 从 eventMap 读取事件处理函数并依次执行
具体实现
class myEventEmitter {
constructor() {
this.eventMap = {
}; // 存储事件和监听函数之间的关系
}
// type:事件名称; handler:事件处理函数
on(type, handler) {
// hanlder 必须是一个函数
if (!(handler instanceof Function)) {