$on $emit $off 底层封装

本文深入解析事件池机制,包括事件的订阅、执行与删除过程。通过定义事件池,实现事件的统一管理和高效触发,适用于多种场景下的事件监听需求。

定义事件池

const eventList = {
    //eventName:[fn1,fn2,fn3] ;
}

事件订阅

const $on = (eventName, callback) => {
    if (!eventList[eventName]) eventList[eventName] = [];
    eventList[eventName].push(callback);
}

事件执行

const $emit = (eventName, parmse) => {
    if (!eventList[eventName]) return;
    eventList[eventName].map((cb) => {
        cb(parmse);
    })
}

事件删除

const $off = (eventName, callback) => {
    if (eventList[eventName]) {
        let index = eventList[eventName].indexOf(callback);
        eventList[eventName].splice(index, 1);
    } else {
        eventList[eventName].length = 0;
    }
}

调用事例:

function fn1(val) {
    console.log(111, val)
}

function fn2(val) {
    console.log(222, val)
}

function fn3(val) {
    console.log(333, val)
}
$on("handle", fn1);	//绑定fn1
$on("handle", fn2);	//绑定fn2
$on("handle", fn3);	//绑定fn3
$emit("handle", "abc");	//111 abc ; 222 abc ; 333 abc
$off("handle", fn2);	//解绑fn2
$off("handle", fn3);	//解绑fn3
$emit("handle", "abc");	//111 abc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值