var foo= {} ;foo.method() 和 单例模式有什么区别
2015-09-09 11:20
295 查看
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()的结果上进行修改的
这样两种方式都可以有相同的结果
相关文章推荐
- 使用python自动发送邮件
- Java 文件或者文件夹的删除
- 零基础学iOS开发
- CRC8查表法
- 兼容Windows 和 Linux 的文件读写工具类
- java反射分析
- tabHost的简单使用
- 小白书暴力之除法,最大乘积,分数拆分,双基回文数
- python Mysql 数据库导入文本数据,中文乱码
- Java System.arraycopy()方法
- Linux应用程序应该存放在什么位置
- 一旦配置oracle em经验
- tomcat配置文件server.xml详解
- equals()方法练习
- 设计模式C++实现1—工厂模式
- 基于C++的Hadoop Map/Reduce框架--HCE
- quick中触摸事件响应机制
- 生成唯一订单
- sqlserver 链接服务器在存储过程中调用的设置
- IOS中Json解析的四种方法