标签:mit function push lte default exp call 传递 多个
1 //存放所有事件的对象 2 const eventMap = {}; 3 4 /* 5 事假绑定 一个事件对应这个多个回调函数 6 key:[] key值代表事件名称 回调函数都存放在[]里面 7 */ 8 let $on = function(eventName,callback){ 9 /* 10 eventName:事件名称 11 callback:回调函数 12 13 一个事件名称可能会对应多个回调函数 14 */ 15 16 //判断当前对象里面的事件是否存在 如果没有存在我就赋值一个空的数组 17 //然后在将这个回调push这个数组里面 18 if(!eventMap[eventName]){ 19 eventMap[eventName] = []; 20 } 21 eventMap[eventName].push(callback); 22 } 23 24 25 //触发的时候要知道一个事件是对应着多个函数 所以所有的事件都要触发 26 //但是如果用户传递的这个事件在eventMap中根本不存在的话我就什么也不干, 27 //如果存在则拿到所以的回调函数然后执行 28 let $emit = function(eventName,val){ 29 let newList = eventMap[eventName]; 30 if(!eventMap[eventName]){ 31 return; 32 } 33 newList.map(cb=>{ 34 cb(val); 35 }) 36 } 37 38 /* 39 如果用户没有传递callback 那么就解绑所有的事件 40 如果用户传递了callback那么就解绑对应的函数 41 */ 42 let $off = function(eventName,callback){ 43 let newList = eventMap[eventName]; 44 if(!callback){ 45 eventMap[eventName] = null; 46 } 47 eventMap[eventName] = newList.filter(cb=>{ 48 return cb != callback 49 }) 50 } 51 52 export default { 53 $on, 54 $emit, 55 $off 56 }
标签:mit function push lte default exp call 传递 多个
原文地址:https://www.cnblogs.com/chennanxiangbei/p/9297919.html