事件总线的原理:
总的来说,是利用了闭包。
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')