手写一个发布-订阅模式

        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);
                        }
                    }
                }
            })()
前端问题总结 文章被收录于专栏

总结一些前端常见的面试笔试题,来和大家分享鸭

全部评论

相关推荐

不愿透露姓名的神秘牛友
10-04 05:12
kalistar:简历留六个字,北京大学(本科),黑体加粗,看看哪个hr不长眼敢碰瓷我们北大✌
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务