js发布订阅模式实现
//可以用于无相关页面或组件的事件、数据传递 let events = {} /**订阅**/ function on(name, self, callback) { let tuple = [self, callback] let callbacks = events[name] if (Array.isArray(callbacks)) { callbacks.push(tuple) } else { events[name] = [tuple] } } /**取消订阅**/ function remove(name, self) { let callbacks = events[name] if (Array.isArray(callbacks)) { events[name] = callbacks.filter((tuple) => { return tuple[0] != self }) } } /**发布**/ function emit(name, data) { let callbacks = events[name] if (Array.isArray(callbacks)) { callbacks.map((tuple) => { let self = tuple[0] let callback = tuple[1] callback.call(self, data) }) } } module.exports = { on, remove, emit }