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

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

 

posted @ 2015-09-09 11:20  阿里河前端  阅读(429)  评论(0编辑  收藏  举报