看了網上的資料感覺有兩種實現,一種是發佈的時候有關鍵字key,然後就執行所有訂閱了key的事件,還有一種是沒有key直接綁定在發佈對象上,對象調用public方法然後執行所有綁定的函數 說到底區別就是前者是多個不同鍵值的數組存事件,後者是只有一個數組存所有時間,下麵的代碼是屬於前一種 ...
看了網上的資料感覺有兩種實現,一種是發佈的時候有關鍵字key,然後就執行所有訂閱了key的事件,還有一種是沒有key直接綁定在發佈對象上,對象調用public方法然後執行所有綁定的函數
說到底區別就是前者是多個不同鍵值的數組存事件,後者是只有一個數組存所有時間,下麵的代碼是屬於前一種
class EventEmitter{ constructor(){ this.EventList = {} } subscribe(key,fun){ if(!this.EventList.hasOwnProperty(key)){ this.EventList[key] = [] } this.EventList[key].push(fun) } unsubscribe(key,fun){ if(!this.EventList[key]) return this.EventList = this.EventList[key].filter((f)=>{ if(f!=fun) return f }) } public(key,arg){ if(!this.EventList[key]){ console.log('no respond event') return } this.EventList[key].forEach(fun=>{ fun(arg) }) } } var EE = new EventEmitter() var print = (data)=>{ console.log(data) } EE.subscribe('done',print) EE.public('done','12223') EE.unsubscribe('done',print) EE.public('done','12223')