zoukankan      html  css  js  c++  java
  • var foo= {} ;foo.method() 和 单例模式有什么区别

    var Foo={}
            Foo.method = function() {
                var i = 0;
                return {
                    a:function(){
                        console.log('aa', i++);
                    },
                    b:function(){
                        console.log('bb', i++);
                    }
                }
            }
            Foo.method().a();
            Foo.method().b();
    
     var bar=(function(){
                var instance;
                function init(){
                    var i =0;
                    return {
                        a:function(){
                            console.log('cc', i++);
                        },
                        b:function(){
                            console.log('ee', i++);
                        }
                    }
                }
                return {
                    method : function (){
                        if(!instance) {
                            instance = init()
                        }
                        return instance;
                    }
                }
            }());
            bar.method().a();
            bar.method().b();
    

      

    第一种方式,两次调用method()分别重新创建了返回对象,每次创建的对象中i重新初始化,所以分别调用a()b()没有关系,也没有连续性。  

    第二种方式相当于对执行结果做了缓存,好处就是缓存该有的好处(再次读取时更快),坏处也是缓存的坏处(占用资源/内存 更多,更久)。

           var Foo={}
            Foo.method = function() {
                var i = 0;
                return {
                    a:function(){
                        console.log('aa', i++);
                    },
                    b:function(){
                        console.log('bb', i++);
                    }
                }
            }
           var foo = Foo.method();
            foo.a();
            foo.b();
            
            var bar=(function(){
                var instance;
                function init(){
                    var i =0;
                    return {
                        a:function(){
                            console.log('cc', i++);
                        },
                        b:function(){
                            console.log('ee', i++);
                        }
                    }
                }
                return {
                    method : function (){
                        if(!instance) {
                            instance = init()
                        }
                        return instance;
                    }
                }
            }());
            bar.method().a();
            bar.method().b();    
    

    通过foo将Foo.method()方法的结果进行缓存  所有foo.b()是在 foo.a()的结果上进行修改的

    这样两种方式都可以有相同的结果 

  • 相关阅读:
    VideoJS播放hls视频
    点击盒子外任意位置关闭当前盒子
    eval()由字符串获取变量值
    React Hooks
    Redux
    react-router-dom
    React开发入门
    js文件下载
    Springboot通过filter修改body参数思路
    java 将指定目录打包成ZipUtils
  • 原文地址:https://www.cnblogs.com/alihe/p/4794101.html
Copyright © 2011-2022 走看看