JS-观察者模式
2021-05-13 04:28
标签:传递参数 array 取消 remove 对象 type 执行 mes gis JS-观察者模式 标签:传递参数 array 取消 remove 对象 type 执行 mes gis 原文地址:https://www.cnblogs.com/nayek/p/12003289.html
// 将观察者放在闭包中,当页面加载就立即执行
var Observer = (function () {
// 防止消息队列暴漏而被篡改故将消息容器作为静态私有变量保存
var _messages = {}
return {
// 注册信息接口
regist(type, fn) {
// 如果消息不存则应该创建一个该消息类型
if (typeof _messages[type] === 'undefined') {
// 将动作推入到该消息对应的动作执行队列中
_messages[type] = [fn]
// 如果此消息存在
}else {
// 将动作方法推入该消息对应的动作执行序列中
_messages[type].push(fn)
}
},
// 发布信息接口
fire(type, args) {
// 如果该消息没有被注册,则返回
if (!_messages[type]) {
return
}
var events = {
type: type,
args: args || {}
},
len = _messages[type].length
// 遍历消息动作
for (var i = 0; i = 0; i--) {
// 如果存在该动作则在消息动作序列中移除相应动作
_messages[type][i] === fn && _messages[type].splice(i, 1)
}
}
}
}
})()
// 注册一个消息
Observer.regist('test', function(e) {
console.log(e.type, e.args.msg)
})
// 发布这则消息
Observer.fire('test', { msg: '传递参数' })