事件总线

自定义事件总线属于一种观察者模式,其中包含三个角色

  • 发布者(Publisher):发出事件
  • 订阅者(Subscriber):订阅事件,并且进行响应(Handler)
  • 事件总线(EventBus):无论是发布者还是订阅者都是通过事件总线作为中间平台
  1. class HYEventBus{
  2. constructor(){
  3. this.eventBus={}
  4. }
  5. on(eventName,eventCallBack,thisArgument){
  6. let handlers=this.eventBus[eventName]
  7. if(!handlers){
  8. handlers=[]
  9. this.eventBus[eventName]=handlers
  10. }
  11. handlers.push({eventCallBack,thisArgument})
  12. }
  13. emit(eventName,...args){
  14. let handlers=this.eventBus[eventName]
  15. if(handlers) return
  16. handlers.forEach(handler=>{
  17. handler.eventCallBack.apply(handler.thisArgument,args)
  18. })
  19. }
  20. off(eventName,eventCallBack){
  21. const handlers=this.eventBus[eventName]
  22. if(handlers) return
  23. for(let i=handlers.length-1;i>=0;i--){
  24. if(handlers[i].eventCallBack===eventCallBack){
  25. handlers.
  26. }
  27. }
  28. }
  29. }
  1. const eventBus=new HYEventBus()
  2. /* main.js */
  3. eventBus.on('event',(value)=>{
  4. console.log('main.js',value)
  5. })
  6. /* utils.js */
  7. eventBus.emit('event',123)