事件总线的原理:
总的来说,是利用了闭包。
function Emit(){
const events = {};
const emit = (eventName, options) => {
if(events[eventName]){
events[eventName].forEach((event) => event(options))
}
};
const on = (eventName, callBack) => {
if(!events[eventName]){
events[eventName] = []
}
events[eventName].push(callBack)
};
const off = (eventName, callback) => {
if(events[eventName]){
events[eventName].filter((handle) => handle !== callback)
}
}
return {emit, on, off}
}
const mit = new Emit()
mit.on('hello', (name) => console.log(`hello ${name}`))
mit.emit('hello', 'chenchen')