var Observer = (function () { //防止消息队列被暴漏而被篡改所以将消息容器作为静态私有变量保存 var __messages = {}; return { //注册信息接口 regist: function (type, fn) { //如果消息不存在则创建一个该消息类型 if (typeof __message[type] === 'undefined') { //将动作推入到该消息对应的动作执行队列中 __messages[type] = [fn]; } else { __messages[type].push(fn); } }, //发布信息接口 fire: function (type, args) { //如果消息没有被注册,则返回 if (!__messages[type]) return; //定义消息信息 var events = { type: type, args: args || {} } // 遍历消息动作 for (var i = 0; i < __messages[type].length; i++) { // 依次执行注册的消息对应的动作序列 __messages[type][i].call(this, events); } }, //移除信息接口 remove: function (type, fn) { //如果不存在就直接return if (!__messages[type]) return; //从最后一个消息动作遍历 for (var i = __messages[type].length - 1; i >= 0; i--) { __message[type][i] === fn && __messages[type].splice(i, 1); } } } })()