手动封装观察者模式

点点圈 提交于 2020-02-13 10:37:23
//事件队列const enentList={}//封装监听
const $on=function(eventName,callback){
    if(!enentList[eventName]){
        enentList[eventName]=[];
    }
    enentList[eventName].push(callback);
}//封装发布
const $emit=function(eventName,params){
    if(enentList[eventName]){
        var arr= enentList[eventName];
        arr.forEach((cb)=>{
            cb(params)
        })
    }
}//封装解绑
const $off=function(eventName,callback){
    if(enentList[eventName]){
        if(callback){
           var index= enentList[eventName].indexOf(callback);
           enentList[eventName].splice(index,1);
        }else{
            enentList[eventName].length=0;
        }
        
    }
}
//测试,
function fn1(params){
    console.log(111,params);
}
function fn2(params){
    console.log(222,params);
}
function fn3(params){
    console.log(333,params);
}
$on("handler",fn1);
$on("handler",fn2);
$on("handler",fn3);
$off("handler",fn1);
$emit(fn1,'aaa')
//运行node observer.js查看结果
export default{
    $on,
    $emit,
    $off
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!