• jQuery memory&unique&stopOnfalse


    memory:保持以前的值,将添加到这个列表的后面的最新的值立即执行调用任何回调 (像一个递延 Deferred)。

    回调函数是从异步队列Deferred分离出来的,所以很多的接口设计都是为了契合Deferred接口,memory用的很多,这个缓存的设计这里提及一下

    主要是用来实现deferred的异步收集与pipe管道风格的数据传递的,具体在Deferred有详解,这里大概了解下作用范围。

    memory这个有点不好理解,我们还是通过列子说明下,看下面的代码:

    function fn1(val) {
            console.log('fn1 says:' + val);
        }
    
        function fn2(val) {
            console.log('fn2 says ' + val);
        }
        function fn3(val){
            console.log("fn3 says " + val);
        }
    
         /* var cbs = $.Callbacks("memory");
        cbs.add(fn1);
        cbs.fire('foo');
        console.log('..........');
        cbs.add(fn2);
        cbs.fire('bar');
        console.log('..........');
        cbs.add(fn3);
        cbs.fire('aaron');*/
        function callbacks(options){
            var list = [];
            var self;
            var memory;
            var firingStart;
            function _fire(data){
                memory = options === 'memory' && data;//===>&&>=
                firingIndex = firingStart || 0;
                firingStart = 0;//改变firingStart,之后的fire还是从0开始。
                firingLength = list.length;
                for(; list && firingIndex < firingLength; firingIndex++){
                    list[firingIndex](data);
                }
            };
            self = {
                add: function(fn){
                    var start = list.length;
                    list.push(fn);
                    if(memory){
                        firingStart = start;//改变firingStart
                        _fire(memory);
                    }
                },
                fire: function(args){
                    if(list){
                        _fire(args);
                        if(options === "once"){
                            list = undefined;
                        }
                    }
                }
            };
            return self;
        }
        var cc = callbacks("memory");
        cc.add(fn1);
        cc.fire("111");
        console.log("...............");
        cc.add(fn2);
        cc.fire("222");

     unique:

    function fn1(val) {
            console.log('fn1 says:' + val);
        }
        function fn2(val) {
            console.log('fn2 says ' + val);
        }
        function fn3(val){
            console.log("fn3 says " + val);
        }
    
          /*var cbs = $.Callbacks("unique");
        cbs.add(fn1);
        cbs.add(fn1);
        cbs.add(fn1);
        cbs.fire('foo');
        console.log('..........');*/
    
        /*cbs.add(fn2);
        cbs.fire('bar');
        console.log('..........');
        cbs.add(fn3);
        cbs.fire('aaron');*/
        function callbacks(options){
            var list = [];
            var self;
            var memory;
            var firingStart;
            function _fire(data){
                memory = options === 'memory' && data;//===>&&>=
                firingIndex = firingStart || 0;
                firingStart = 0;//改变firingStart,之后的fire还是从0开始。
                firingLength = list.length;
                for(; list && firingIndex < firingLength; firingIndex++){
                    list[firingIndex](data);
                }
            };
            self = {
                add: function(fn){
                    var start = list.length;
                    if(options === "unique"){
                        if(list.indexOf(fn) === -1){
                            list.push(fn);
                        }
                    }else{
                        list.push(fn);
                    }
    
                    if(memory){
                        firingStart = start;//改变firingStart
                        _fire(memory);
                    }
                },
                fire: function(args){
                    if(list){
                        _fire(args);
                        if(options === "once"){
                            list = undefined;
                        }
                    }
                }
            };
            return self;
        }
        var cc = callbacks("unique");
        cc.add(fn1);
        cc.add(fn1);
        cc.add(fn1);
        cc.fire("111");
    View Code

     stopOnfalse:

    function fn1(val) {
            console.log('fn1 says:' + val);
            return false;
        }
        function fn2(val) {
            console.log('fn2 says ' + val);
            return false;
        }
        function fn3(val){
            console.log("fn3 says " + val);
        }
    
          /*var cbs = $.Callbacks("stopOnFalse");
        cbs.add(fn1);
        cbs.fire('foo');
        console.log('..........');
        cbs.add(fn2);
        cbs.fire('bar');
        console.log('..........');
        cbs.add(fn3);
        cbs.fire('aaron');*/
        /*cbs.add(fn2);
        cbs.fire('bar');
        console.log('..........');
        ;*/
        function callbacks(options){
            var list = [];
            var self;
            var memory;
            var firingStart;
            function _fire(data){
                memory = options === 'memory' && data;//===>&&>=
                firingIndex = firingStart || 0;
                firingStart = 0;//改变firingStart,之后的fire还是从0开始。
                firingLength = list.length;
                for(; list && firingIndex < firingLength; firingIndex++){
                   if(list[firingIndex](data) === false && options === 'stopOnFalse'){
                       break;
                   };
                }
            };
            self = {
                add: function(fn){
                    var start = list.length;
                    if(options === "unique"){
                        if(list.indexOf(fn) === -1){
                            list.push(fn);
                        }
                    }else{
                        list.push(fn);
                    }
    
                    if(memory){
                        firingStart = start;//改变firingStart
                        _fire(memory);
                    }
                },
                fire: function(args){
                    if(list){
                        _fire(args);
                        if(options === "once"){
                            list = undefined;
                        }
                    }
                }
            };
            return self;
        }
        var cc = callbacks("stopOnFalse");
        cc.add(fn1);
        cc.fire("111");
        cc.add(fn2);
        cc.fire("222");
    View Code
  • 相关阅读:
    js获取html参数。
    jquery判断单选按钮是否选中
    js滑动触屏事件监听
    单例模式之Java
    Android开发把项目打包成apk
    jdom解析XML 中文
    PhoneGap Connection
    java 文件操作
    html参数编码
    JS 判断字符串包含
  • 原文地址:https://www.cnblogs.com/darr/p/5141553.html
Copyright © 2020-2023  润新知