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()的结果上进行修改的
这样两种方式都可以有相同的结果
var foo= {} ;foo.method() 和 单例模式有什么区别的更多相关文章
- function foo(){}、(function(){})、(function(){}())等函数区别分析
前面一段时间,看到(function(){}),(function(){}())这些函数就犯晕,不知道它到底是什么意思,为什么函数外要加小括号,函数后要加小括号,加和不加到底有什么区别……一直犯迷糊, ...
- var、let、const声明变量的区别
let和var声明变量的区别:1.let所声明的变量只在let命令所在的代码块内有效.(块级作用域) for(let i=0;i<10;i++){ // ... } console.log(i) ...
- var a=b=c=1; 和 var a=1, b=2, c=3; 的区别。
function test(){ var a=b=c=1; var a=1, b=2,c=3; } 1中b\c 为全局变量, a为私量 2中a\b\c为私量
- js中,var 修饰变量名和不修饰的区别
js中 允许在定义变量的时候 不加var 修饰符.js会在当前作用域下寻找上下文是否定义了此变量, 如果没有找到则会为这个变量分配内存.当且将其视为window的成员. 也就是全局变量. 如果加了va ...
- form表单中method的get和post区别
一.问题的提出 <form action="getPostServlet/getPost.do?param4=param4" method="get" ...
- Java Synchronized Method This Static Class Object 区别
1. 必须基于对象 Synchronized Method 和 Synchronized(this) 块,除了范围小点 (方法和块),没差别都是阻塞整个对象 - 如果对象有多个 Synchronize ...
- 有具体名称的匿名函数var bar = function foo(){}
http://kangax.github.io/nfe/ 命名的函数表达式 函数表达式实际上可以经常看到.Web开发中的一个常见模式是基于某种特性测试来"分叉"函数定义,从而获得最 ...
- JavaScript 中,定义函数时用 var foo = function () {} 和 function foo() {}有什么区别?
对于新手来说(本人也是新手-_-!),好像var foo = function () {} 和 function foo(){}并没有什么区别,意识里可能就认为就是两种不同的写法而已.但是,通过网上查 ...
- foo.prototype作为新对象的原型来使用
最近在研究js,疑惑也比较多.主要是被原型这个东西给弄迷糊了.疑惑出自于: function foo { this.name = 'foo'; } alert(foo.prototype === Fu ...
随机推荐
- 线性表链式存储方式的C语言实现
/* 编译器:Dev-c++ 5.1.0 文件名:linkList3.cpp 代码版本号:1.0 时间:2015年9月24日11:34:16 */ #include <stdio.h> # ...
- Struts2请求处理流程及源码分析
1.1 Struts2请求处理 1. 一个请求在Struts2框架中的处理步骤: a) 客户端初始化一个指向Servlet容器的请求: b) 根据Web.xml配置,请求首先经过ActionConte ...
- C#中out的一种用法
1.当希望方法返回多个值时,声明out 方法很有用. 这样使方法可以有选择地返回值. using System; using System.Collections.Generic; using Sys ...
- 转:堆(heap)和栈(stack)有什么区别??
简单的可以理解为: heap:是由malloc之类函数分配的空间所在地.地址是由低向高增长的. stack:是自动分配变量,以及函数调用的时候所使用的一些空间.地址是由高向低减少的. 预备知识—程序的 ...
- Entity Framework with MySQL 学习笔记一(安装)
声明 : 数据库是Mysql,本人的程度只到会写sql语句(不会储蓄过程), c# 会基本的ADO.NET数据库访问,LINQ基础. 这篇只做个人学习|温习作用. 新手可以参考,也请高手指正错误, ...
- Qt全局热键(windows篇)(使用RegisterHotKey和句柄进行注册)
转载:http://www.cuteqt.com/blog/?p=2088 Qt对于系统底层,一直没有很好的支持,例如串口并口通信,还有我们经常都会用到的全局热键,等等.既然Qt可能出于某种原因,不对 ...
- js 数组引用 发现的问题
最近做项目时,要对返回的数据[保存在json数组中]做一次修改,但原数据要保留一次做备用.首先想到,原数据不动,用一个临时的变量来修改,大致模型就是这样: // 原始: a=[1,2,3,4,5,.. ...
- HDOJ(HDU) 1465 不容易系列之一(错排)
Problem Description 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好"一件"事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就 ...
- Android手机音量的控制
1.AudioManager audio=(AudioManager) super.getSystemService(Context.AUDIO_SERVICE);//获得手机的声音服务 //设置加音 ...
- Java虚拟机内存优化实践
前面一篇文章介绍了Java虚拟机的体系结构和内存模型,既然提到内存,就不得不说到内存泄露.众所周知,Java是从C++的基础上发展而来的,而C++程序的很大的一个问题就是内存泄露难以解决,尽管Java ...