题解 | #发布订阅模式#
发布订阅模式
http://www.nowcoder.com/practice/569e1fd641be4fd797f12a28b763d709
19_发布订阅模式
本题考点:设计模式
根据题目要求,完成"EventEmitter"类实现发布订阅模式,考虑到同一名称事件可能有多个不同的执行函数,所以在构造函数中需要以对象的结构存放事件,核心步骤有:
- 构造函数中创建”events“对象变量用于存放所有的事件
- 添加”on“函数,用于订阅事件。当总事件中不存在此事件时创建新的事件数组,当存在时将”fn“函数添加在该事件对应数组中
- 添加”emit“函数,用于发布事件,遍历该事件下的函数数组并全部执行
参考答案:
class EventEmitter {
constructor() {
this.events = {}
}
on(event, fn) {
if(!this.events[event]) {
this.events[event] = [fn]
} else {
this.events[event].push(fn)
}
}
emit(event) {
if(this.events[event]) {
this.events[event].forEach(callback => callback())
}
}
}