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()的结果上进行修改的

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

  • 相关阅读:
    GrapeCity Documents (服务端文档API组件) V3.0 正式发布
    js 手机号码正则表达式
    springMvc 注解@JsonFormat 日期格式化
    solr java代码
    solr全文检索
    在阿里云服务器CentOS7安装mysql提示“No package mysql-server available上安装mysql遇到的问题
    MockBean 单元测试
    redis缓存
    c3p0连接池
    springboot Transactional事务的使用
  • 原文地址:https://www.cnblogs.com/alihe/p/4794101.html
Copyright © 2011-2022 走看看