1. const eventHub = {
    2. // 任务队列
    3. map: {},
    4. // 入队
    5. on:(name, fn)=>{
    6. eventHub.map[name] = eventHub.map[name] || []
    7. eventHub.map[name].push(fn)
    8. },
    9. // 或者称为trigger,出发队列中事件
    10. emit: (name, data)=>{
    11. const q = eventHub.map[name]
    12. if(!q){return}
    13. q.map(fn =>fn.call(undefined, data))
    14. },
    15. // 出队
    16. off: (name, fn)=>{
    17. const q = eventHub.map[name]
    18. if(!q){return}
    19. const index = q.indexOf(fn)
    20. if(index < 0){return}
    21. q.splice(index, 1)
    22. }
    23. }
    24. // 监听事件,把事件放到任务队列里面
    25. eventHub.on('click', console.log)
    26. // 取消事件
    27. eventHub.off('click', console.log)
    28. // 触发事件
    29. setTimeout(()=>{
    30. eventHub.emit('click', 'pank')
    31. },3000)