事件绑定是一个对象绑定多个事件函数,因此是一对多的模式,即观察者模式,数据类型采用对象
封装on:
思路:创建一个事件仓库存放事件:
判断当前事件是否存在,不存在,初始化一下,然后将回调函数push到数组中;
let eventCon = {}; const eventOn = (eventName,callback)=>{ if(!eventCon[eventName]){ eventCon[eventName] = []; } eventCon[eventName].push(callback) }
封装emit:
思路:判断当前事件是否存在,如果存在,遍历数组的函数调用即可,如果第二个参数存在,将参数传递到函数中;
const eventEmit = (eventName,params)=>{ if(eventCon[eventName]){ let arr = eventCon[eventName] arr.map((callback)=>{ callback(params) }) } }
封装off:
思路:判断当前事件是否存在,如果存在,判断第二个参数是否存在,如果第二个参数存在,将callback从当前数组移除;不存在,
清除数组。
const eventOff = (eventName,callback)=>{ if(eventCon[eventName]){ if(callback){ let index = eventCon[eventName].indexof(callback); eventCon[eventName].splice(index,1); }else{ eventCon[eventName].length = 0; } } }