57-观察者模式 发表于 2018-05-03 | 分类于 前端-02-js基础复习 | link 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748var Event = (function(){ var list = {}, listen, trigger, remove; listen = function(key,fn){ //监听事件函数 if(!list[key]){ list[key] = []; //如果事件列表中还没有key值命名空间,创建 } list[key].push(fn); //将回调函数推入对象的“键”对应的“值”回调数组 }; trigger = function(){ //触发事件函数 var key = Array.prototype.shift.call(arguments); //第一个参数指定“键” msg = list[key]; if(!msg || msg.length === 0){ return false; //如果回调数组不存在或为空则返回false } for(var i = 0; i < msg.length; i++){ msg[i].apply(this, arguments); //循环回调数组执行回调函数 } }; remove = function(key, fn){ //移除事件函数 var msg = list[key]; if(!msg){ return false; //事件不存在直接返回false } if(!fn){ delete list[key]; //如果没有后续参数,则删除整个回调数组 }else{ for(var i = 0; i < msg.length; i++){ if(fn === msg[i]){ msg.splice(i, 1); //删除特定回调数组中的回调函数 } } } }; return { listen: listen, trigger: trigger, remove: remove }})();var fn = function(data){ console.log(data + '的推送消息:xxxxxx......');}Event.listen('某公众号', fn);Event.trigger('某公众号', '2016.11.26');Event.remove('某公众号', fn);