js发布订阅模式实现

//可以用于无相关页面或组件的事件、数据传递,减少在onShow中的业务,降低代码耦合
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
}

猜你喜欢

转载自www.cnblogs.com/ckAng/p/10330286.html
今日推荐