实现一个 Event ,示例如下:

const e = new Event();

e.on("click", x => console.log(x.id));
e.emit("click", { id: 3 }); // 3
e.emit("click", { id: 4 }); // 4

一个简单的发布订阅模式实现如下,主要有两个核心 API

  • emit 发布一个事件
  • on 监听一个事件
class Event {
	// Events<String, Function[]>
    events = {};

    emit(type, ...args) {
    	// 发布事件
    	// 可以传递多个参数,每个事件处理函数都会被执行一次
        const listeners = this.events[type];
        for (const listener of listeners) {
            listener(...args);
        }
    }

    on(type, listener) {
    	// 注册事件
    	// 一个事件可以绑定多个事件处理函数
        this.events[type] = this.events[type] || [];
        this.events[type].push(listener);
    }
}
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐