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

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

  • 相关阅读:
    349. 两个数组的交集
    383. 赎金信
    242. 有效的字母异位词
    844. 比较含退格的字符串
    904. 水果成篮
    剑指offer(9)变态跳台阶
    剑指offer(8)跳台阶
    剑指offer(7)斐波那契数列
    剑指offer(6)旋转数组的最小数字
    剑指offer(5)用两个栈实现队列
  • 原文地址:https://www.cnblogs.com/alihe/p/4794101.html
Copyright © 2011-2022 走看看