• 17-js观察者模式


    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>17-观察者模式</title>
    </head>
    <body>
        <input value="btn" id="ipt" type="button">
        <script type="text/javascript">
            //创建观察者
            var Observer = (function(){
                var __messages = {};
                return {
                    //注册信息接口
                    regist : function(type, fn){
                        //如果此消息不存在则创建一个该消息类型
                        if(typeof __messages[type] === 'undefined'){
                            //将动作推入到该消息对应的动作执行队列中
                            __messages[type] = [fn];//--> fn转为数组
                            //console.info(__messages);
                        //如果此消息存在
                        }else{
                            //将动作推入到该消息对应的动作执行队列中
                            __messages[type].push(fn);
                            //console.info(__messages);
                        }
                    }
                    //发布信息接口
                    ,fire : function(type, args){
                        //如果该消息没有被注册,则返回
                        if(!__messages[type]){
                            return;
                        }
                        //定义消息信息
                        var events = {
                            type : type,                //消息类型
                            args : args || {}            //消息携带数据
                        },
                        i = 0,                            //消息动作循环变量
                        len = __messages[type].length;  //消息动作长度
                        //遍历消息动作
                        for(; i < len; i++){
                            //依次执行注册的消息对应的动作序列
                            __messages[type][i].call(this, events);
                        }
                    }
                    //移除信息接口
                    ,remove : function(type, fn){
                        //如果消息动作队列存在
                        if(__messages[type] instanceof Array){
                            //从最后一个消息动作遍历
                            var i = __messages[type].length - 1;
                            for(; i >= 0; i--){
                                //如果存在该动作则在消息动作序列中移除相应动作
                                __messages[type][i] === fn && __messages[type].splice(i, 1);
                            }
                        }
                    }    
                }
            })();
            //console.info(Observer);
            /*Observer.regist('test',function(e1){
                console.info(e1.__proto__);
                console.info(e1.type,e1.args.msg);
            });
            Observer.fire('test',{msg:'传递参数'});*/
            (function(){
                var h  = 555;
                function aa(e){
                    console.info(e);
                    console.info("a的代码",e.args.text);
                    console.info("a的代码",e.args.num);
    
                }
                Observer.regist('addCM',aa);
            })();
            (function(){
                function bb(e){
                    console.info('b的代码',e.args.text);
                    console.info('b的代码',e.args.num);
                }
                Observer.regist('addCM',bb);
                //.regist('removeCM',bb);
            })();
            (function(){
                var ipt = document.getElementById('ipt');
                ipt.onclick = function(){
                    //Observer.fire('removeCM'{num:-1});
                    console.info(123);
                    Observer.fire('addCM',{text:"我是text内容",num:3});
                }
                /*function cc(){
                    console.info('c的代码');
                }*/
                
            })();
            
            
        </script>
        
    </body>
    </html>
  • 相关阅读:
    大数据量查询优化——数据库设计、SQL语句、JAVA编码
    vue项目全局修改字体
    vue项目使用iframe嵌入另一个vue项目的页面
    vue中解决chrome浏览器自动播放音频 和MP3语音打包到线上
    java的string方法使用
    java使用EasyExcel操作Excel
    vue中,使用 es6的 ` 符号给字符串之间换行
    vue显示后端传递的图片流
    最全vue的vue-amap使用高德地图插件画多边形范围
    vue+elementUI实现 分页表格的单选或者多选、及禁止部分选择
  • 原文地址:https://www.cnblogs.com/ryans/p/7199967.html
Copyright © 2020-2023  润新知