eventBus原理

function eventBusClass () {
    this.msgQuenes = {}
}

eventBusClass.prototype = {
    on: function(msgName, func){
        // 1. 判断当前队列里边是否包含msgName
        if (this.msgQuenes.hasOwnproperty(msgName)) {
            // 2. 判断当前 是否为函数,不为函数的使用场景如最下边
            if (typeof this.msgQuenes[msgName] === 'function') {
                // 3. 若是,则和上一次的一起放进一个数组里边
                this.msgQuenes[msgName] = [this.msgQuenes[msgName], func]
            } else {
                // 4. 若不是,证明进行了多次订阅,直接往数组里边添加
                this.msgQuenes[msgName] = [...this.msgQuenes[msgName], func]
            }
        } else {
            // 5. 若不包含直接添加
            this.msgQuenes[msgName] = func 
        }
    },
    once: function(msgName, func){
        this.msgQuenes[msgName] = func
    },
    emit: function(msgName, msg){
        if (!this.msgQuenes.hasOwnproperty(msgName)) return
        if (typeof this.msgQuenes[msgName] === 'function') {
            // 1
            this.msgQuenes[msgName](msg)
        } else {
            // 2 数组进入
            this.msgQuenes[msgName].map(fn => {
                fn()
            })
        }
    },
    off: function(msgName){
        if (!this.msgQuenes.hasOwnproperty(msgName)) return
        delete this.msgQuenes[msgName]
    }
}

const BUS = new eventBusClass()

/**
 * 例子A:
 *  BUS.on('testA', function a1(){alert(11111)}) 执行on中的5
 *  BUS.on('testA', function a2(){alert(22222)})  执行on中的3
 *  BUS.on('testA', function a3(){alert(33333)}) 执行on中4
 *
 *  BUS.emit('testA', 2222) 执行emit中的 2 else语句
 * 
 * 
 * 例子B:
 *  BUS.on('testB', function a1(){alert(11111)}) 执行on中的5
 *
 *  BUS.emit('testB', 2222) 执行emit中的 1if语句
 *  
 */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值