公布订阅模式学习
公布订阅模式优缺点
- 用于跨组件通信
- 用于一对多,一处公布,多出订阅
- 不好保护
class Pubsub { list = {};//用于装订阅函数 listen(key, fn) { //如果list对象中没有数组装fns给以数组用于装fns if (!this.list[key]) { this.list[key] = [] } this.list[key].push(fn) } //公布 publish(key, ...args) { if (!this.list[key] || this.list[key].length == 0) return; for (let i = 0; i < this.list[key].length; i++) { const fn = this.list[key][i]; fn.apply(this, args) } } //移除 remove(key, fn) { const fns = this.list[key]; if (!fns || fns.length == 0) return false; for (let i = 0; i < fns.length; i++) { const _fn = fns[i] if (_fn == fn) { fns.splice(i, 1) } } } }