首页 > 其他 > 详细

var foo= {} ;foo.method() 和 单例模式有什么区别

时间:2015-09-09 13:11:59      阅读:202      评论:0      收藏:0      [点我收藏+]
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()的结果上进行修改的

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

 

var foo= {} ;foo.method() 和 单例模式有什么区别

原文:http://www.cnblogs.com/alihe/p/4794101.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!