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 相关文章推荐
为Yahoo! UI Extensions Grid增加内置的可编辑器
Mar 10 Javascript
被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
Jan 22 Javascript
jQuery Selector选择器小结
May 06 Javascript
加载jQuery后$冲突的解决办法
Jul 09 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
Oct 16 Javascript
QQ登录背景闪动效果附效果演示源码下载
Sep 22 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
Jul 22 Javascript
js变量提升深入理解
Sep 16 Javascript
利用yarn实现一个webpack+react种子
Oct 25 Javascript
angular中的cookie读写方法
Aug 02 Javascript
JavaScript创建对象的四种常用模式实例分析
Jan 11 Javascript
jQuery操作元素追加内容示例
Jan 10 jQuery
超级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
正则表达式语法
2006/10/09 Javascript
基于qmail的完整WEBMAIL解决方案安装详解
2006/10/09 PHP
PHP版网站缓存加快打开速度的方法分享
2012/06/03 PHP
ThinkPHP项目分组配置方法分析
2016/03/23 PHP
PHP基于SimpleXML生成和解析xml的方法示例
2017/07/17 PHP
分析php://output和php://stdout的区别
2018/05/06 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
JavaScript版DateAdd和DateDiff函数代码
2012/03/01 Javascript
使用jquery获取网页中图片高度的两种方法
2013/09/26 Javascript
JS获取随机数函数可自定义最小值最大值
2014/05/08 Javascript
解析javascript瀑布流原理实现图片滚动加载
2016/03/10 Javascript
Bootstrap基本样式学习笔记之表格(2)
2016/12/07 Javascript
微信小程序 省市区选择器实例详解(附源码下载)
2017/01/05 Javascript
Nodejs进阶:express+session实现简易登录身份认证
2017/04/24 NodeJs
JavaScript中重名的函数与对象示例详析
2017/09/28 Javascript
详解关于vue-area-linkage走过的坑
2018/06/27 Javascript
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
微信小程序实现简单评论功能
2018/11/28 Javascript
js+springMVC 提交数组数据到后台的实例
2019/09/21 Javascript
Python 遍历列表里面序号和值的方法(三种)
2017/02/17 Python
带你了解python装饰器
2017/06/15 Python
Python实现字符串匹配算法代码示例
2017/12/05 Python
解决pandas使用read_csv()读取文件遇到的问题
2018/06/15 Python
tensorflow学习教程之文本分类详析
2018/08/07 Python
浅谈python实现Google翻译PDF,解决换行的问题
2018/11/28 Python
浅谈pyqt5在QMainWindow中布局的问题
2019/06/21 Python
感知器基础原理及python实现过程详解
2019/09/30 Python
Python字典添加,删除,查询等相关操作方法详解
2020/02/07 Python
python中rc1什么意思
2020/06/19 Python
如何基于python把文字图片写入word文档
2020/07/31 Python
碧欧泉Biotherm加拿大官方网站:法国高端护肤品牌
2019/10/18 全球购物
经典C++面试题一
2016/11/06 面试题
《最后的姿势》教学反思
2014/02/27 职场文书
党员承诺书怎么写
2014/05/20 职场文书
中学教师个人总结
2015/02/10 职场文书
初中物理教学反思
2016/02/19 职场文书