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