EventBus 事件總線

// 手寫EventBus
class EventBus{
  constructor(){
    this._event = {}
  }
  // 注冊(cè)
  $on(eventName,fn){
    this._event[eventName] = this._event[eventName] || []
    this._event[eventName].push(fn)
  }
  // 觸發(fā)
  $emit(eventName,args){
    if(!this._event[eventName]) {
      console.log('未注冊(cè)該事件');
      return // 未注冊(cè)該事件
    }
    this._event[eventName].forEach(fn => {
      fn(args)
    });
  }
  // 移除
  $remove(eventName,fn){
    if(!this._event[eventName]){
      console.log('未綁定該事件');
      return // 未綁定該事件
    }
    if(!fn){
      delete this._event[eventName]
      return
    }
    const eventHandler = this._event[eventName]
    const handlerIndex = eventHandler.findIndex(it => it === handler)
    this._event[eventName].splice(handlerIndex,1)
    if(this._event[eventName].length === 0){
      delete this._event[eventName]
    }
  }
  $once(eventName,args){
    this.$emit(eventName,args)
    this.$remove(eventName)
  }
}
const event_bus = new EventBus
const fn1 = (param) => {
  console.log('fn1',param)
}
event_bus.$on('testfunc',fn1)
event_bus.$once('testfunc',123)
event_bus.$emit('testfunc',123)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容