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

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

上一篇:2018.11.01 洛谷P3953 逛公园(最短路+dp)


下一篇:iOS菜鸟之AFN的二次封装