JavaScript的单例模式 (singleton in Javascript)


Posted in Javascript onJune 11, 2010

单例模式的基本结构:

MyNamespace.Singleton = function() { 
return {}; 
}();

比如:
MyNamespace.Singleton = (function() { 
return { // Public members. 
publicAttribute1: true, 
publicAttribute2: 10, 
publicMethod1: function() { 
... 
}, 
publicMethod2: function(args) { 
... 
} 
}; 
})();

但是,上面的Singleton在代码一加载的时候就已经建立了,怎么延迟加载呢?想象C#里怎么实现单例的:)采用下面这种模式:
MyNamespace.Singleton = (function() { 
function constructor() { // All of the normal singleton code goes here. 
... 
} 
return { 
getInstance: function() { 
// Control code goes here. 
} 
} 
})();

具体来说,把创建单例的代码放到constructor里,在首次调用的时候再实例化:
完整的代码如下:
MyNamespace.Singleton = (function() { 
var uniqueInstance; // Private attribute that holds the single instance. 
function constructor() { // All of the normal singleton code goes here. 
... 
} 
return { 
getInstance: function() { 
if(!uniqueInstance) { // Instantiate only if the instance doesn't exist. 
uniqueInstance = constructor(); 
} 
return uniqueInstance; 
} 
} 
})();
Javascript 相关文章推荐
javascript学习网址备忘
May 29 Javascript
使用JavaScript+canvas实现图片裁剪
Jan 30 Javascript
javascript实现画不相交的圆
Apr 07 Javascript
招聘网站基于jQuery实现自动刷新简历
May 10 Javascript
JS组件系列之Bootstrap Icon图标选择组件
Jan 28 Javascript
Javascript 实现简单计算器实例代码
Oct 23 Javascript
js控制一个按钮是否可点击(可使用)disabled的实例
Feb 14 Javascript
在移动端使用vue-router和keep-alive的方法示例
Dec 02 Javascript
js图片无缝滚动插件使用详解
May 26 Javascript
element-ui 中使用upload多文件上传只请求一次接口
Jul 19 Javascript
15分钟学会vue项目改造成SSR(小白教程)
Dec 17 Javascript
5个你不知道的JavaScript字符串处理库(小结)
Jun 01 Javascript
超级24小时弹窗代码 24小时退出弹窗代码 100%弹窗代码(IE only)
Jun 11 #Javascript
基于jQuery的js分页代码
Jun 10 #Javascript
基于jQuery的弹出警告对话框美化插件(警告,确认和提示)
Jun 10 #Javascript
jQuery EasyUI中对表格进行编辑的实现代码
Jun 10 #Javascript
jQuery创建自己的插件(自定义插件)的方法
Jun 10 #Javascript
jQuery-ui中自动完成实现方法
Jun 10 #Javascript
Array.prototype.slice 使用扩展
Jun 09 #Javascript
You might like
在WAMP环境下搭建ZendDebugger php调试工具的方法
2011/07/18 PHP
php截取后台登陆密码的代码
2012/05/05 PHP
利用PHP实现图片等比例放大和缩小的方法详解
2013/06/06 PHP
php smarty truncate UTF8乱码问题解决办法
2014/06/13 PHP
php使用mysqli向数据库添加数据的方法
2015/03/20 PHP
PHP实现创建微信自定义菜单的方法示例
2017/07/14 PHP
javascript与CSS复习(《精通javascript》)
2010/06/29 Javascript
菜鸟javascript基础资料整理3 正则
2010/12/06 Javascript
由JavaScript中call()方法引发的对面向对象继承机制call的思考
2011/09/12 Javascript
ECMAScript 创建自己的js类库
2012/11/22 Javascript
js获取元素外链样式的方法
2015/01/27 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
jquery实现全选和全不选功能效果的实现代码【推荐】
2016/05/05 Javascript
jquery实现全选、不选、反选的两种方法
2016/09/06 Javascript
js数组与字符串常用方法总结
2017/01/13 Javascript
angularjs实现搜索的关键字在正文中高亮出来
2017/06/13 Javascript
通过一个简单的例子学会vuex与模块化
2017/11/22 Javascript
nodeJS微信分享
2017/12/20 NodeJs
jQuery实现的上传图片本地预览效果简单示例
2018/03/29 jQuery
vue+elementUi 实现密码显示/隐藏+小图标变化功能
2020/01/18 Javascript
[02:27]DOTA2英雄基础教程 莱恩
2014/01/17 DOTA
[54:51]Ti4 冒泡赛第二轮LGD vs C9 3
2014/07/14 DOTA
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
python使用KNN算法手写体识别
2018/02/01 Python
python学生管理系统
2019/01/30 Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
2021/01/28 Python
CSS3实现跳动的动画效果
2016/09/12 HTML / CSS
利用纯CSS3实现tab选项卡切换示例代码
2016/09/21 HTML / CSS
使用HTML5做的导航条详细步骤
2020/10/19 HTML / CSS
MVMT手表官方网站:时尚又实惠的高品质手表
2016/12/04 全球购物
民主评议党员总结
2014/10/20 职场文书
2014年保安个人工作总结
2014/11/13 职场文书
孕妇离婚协议书范本
2014/11/20 职场文书
2015年七夕爱情寄语
2015/03/24 职场文书
感恩节寄语2015
2015/03/24 职场文书
千与千寻观后感
2015/06/04 职场文书