1. 介绍
- 订阅者
- 发布者
- 信号中心
我们假定,存在一个"信号中心",某个任务执行完成,就向信号中心"发布"(
publish
)一个信号,其他任务可以向信号中心"订阅"(subscribe
)这个信号,从而知道什么时候自己可以执行,这就叫做"发布/订阅模式"(publish-subscribe pattern
)
// 事件触发器
class EventEmitter {
constructor() {
// { 'click': [fn1, fn2], 'change': [fn] }
this.subs = Object.create(null);
}
// 订阅通知(注册事件)
$on(eventType, handler) {
this.subs[eventType] = this.subs[eventType] || [];
this.subs[eventType].push(handler);
}
// 发布通知(触发事件)
$emit(eventType) {
if (this.subs[eventType]) {
this.subs[eventType].forEach(handler => {
handler();
});
}
}
}
// 测试
let em = new EventEmitter();
// 注册事件
em.$on('click', () => {
console.log('click1');
})
em.$on('click', () => {
console.log('click2');
})
// 触发事件
em.$emit('click');
网友评论