仅记录-事件派发与订阅监听

仅记录
事件派发与订阅监听

// 封装事件订阅
let customEvent = {
    // 自定义事件列
    event: {},
    // 订阅自定义事件
    on: function (eventName, eventFn) {
        if (this.event[eventName]) {
            // 如果定义的事件名称在event对象中不为空,则将对应的函数放入event对象中的自定义事件中
            this.event[eventName].push(eventFn)
        } else {
            // 如果定义的事件名称在event对象中为空,不存在,则创建一个对应的数组,并将函数放入其中
            this.event[eventName] = []
            this.event[eventName].push(eventFn)
        }
    },
    // 派发自定义事件
    emit: function (eventName, eventMsg) {
        if (this.event[eventName]) {
            this.event[eventName].forEach(itemFn => {
                itemFn(eventMsg)
            })
        }
    },
    // 删除自定义事件
    delete: function (eventName, eventFn) {
        if (this.event[eventName]) {
            delete this.event[eventName]
            eventFn()
        }
    }
}


let runFn = function (data) {
    console.log('执行函数runFn!!!', data)
    // 派发自定义Name事件
    customEvent.emit('customEventName', data)
}


// 通过自定义Name订阅
customEvent.on('customEventName', function (eventMsg) { console.log('1.执行顺序1') })
customEvent.on('customEventName', function (eventMsg) { console.log('2.执行顺序2') })
customEvent.on('customEventName', function (eventMsg) { console.log('3.执行顺序4') })
runFn(123)
/**
* 执行函数runFn!!! 123
* 1.执行顺序1
* 2.执行顺序2
* 3.执行顺序3
*/

console.log('customEvent.event---', customEvent.event)
customEvent.on('customEventName', function (eventMsg) { console.log('4.执行顺序4', eventMsg) })
runFn(456)
/**
*执行函数runFn!!! 456
*1.执行顺序1
*2.执行顺序2
*3.执行顺序3
*4.执行顺序4 456
*/

let encodeFun = function (data) {
    console.log('输出:' + data)
    customEvent.emit('enCode', data)
}

customEvent.delete('customEventName', function () {
    console.log('已删除')
})
customEvent.on('enCode', function (data) {
    console.log('输出1:', data)
})
console.log('customEvent.event', customEvent.event)
encodeFun(789)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值