JS手写发布订阅

手写发布订阅

class pubSub {
    constructor(){
        this.list = {}
    }
    // 订阅
    subscribe(key, fn) {  
        if (!this.list[key]) {
            this.list[key] = []
        }
        this.list[key].push(fn)
    }
    // 发布
    publish(key, ...args) {  
        for (let fn of this.list[key]) {
            fn.apply(this, args)
        }
    }
    // 取消订阅
    unSubscribe(key, fn) { 
        let fnlist = this.list[key]
        if (!fnlist) return
        if (!fn) {
            fnlist.length = 0
        } else {
            fnlist.forEach((item, index) => {
                if (item === index) {
                    fnlist.splice(index, 1)
                }
            })
        }
    }
}

let p1 = new pubSub()
p1.subscribe('onwork', (time) => { console.log("上班了:" + time) })
p1.subscribe('offwork', (time) => { console.log("下班了:" + time) })
p1.subscribe('launch', (time) => { console.log("吃饭了:" + time) })

// 发布
p1.publish('onwork', '9:00:00')      // 上班了:9:00:00
p1.publish('offwork', '18:00:00')    // 下班了:18:00:00
p1.publish('launch', '12:00:00')     // 吃饭了:12:00:00

p1.unSubscribe('onwork')
p1.publish('onwork', '1222:00:00')
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值