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 相关文章推荐
jquery实现的可隐藏重现的靠边悬浮层实例代码
May 27 Javascript
JS禁用浏览器退格键实现思路及代码
Oct 29 Javascript
借助JavaScript脚本判断浏览器Flash Player信息的方法
Jul 09 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
Aug 08 Javascript
超级简单的jquery操作表格方法
Dec 15 Javascript
实现placeholder效果的方案汇总
Jun 11 Javascript
js判断浏览器类型及设备(移动页面开发)
Jul 30 Javascript
jQuery选择器用法实例详解
Dec 17 Javascript
Bootstrap fileinput文件上传组件使用详解
Jun 06 Javascript
jQuery实现checkbox的简单操作
Nov 18 jQuery
微信小程序新手教程之启动页的重要性
Mar 03 Javascript
js使用文档就绪函数动态改变页面内容示例【innerHTML、innerText】
Nov 07 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
php,不用COM,生成excel文件
2006/10/09 PHP
数据库的日期格式转换
2006/10/09 PHP
通过PHP的内置函数,通过DES算法对数据加密和解密
2012/06/21 PHP
PDO防注入原理分析以及使用PDO的注意事项总结
2014/10/23 PHP
PHP多维数组遍历方法(2种实现方法)
2015/12/10 PHP
PHP中调用C/C++制作的动态链接库的教程
2016/03/10 PHP
[推荐]javascript 面向对象技术基础教程
2009/03/03 Javascript
js实现禁止中文输入的方法
2015/01/14 Javascript
JavaScript设计模式经典之命令模式
2016/02/24 Javascript
文本框只能输入数字的js代码(含小数点)
2016/07/10 Javascript
详解Node.js实现301、302重定向服务
2017/04/07 Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
2017/04/10 jQuery
vue.js学习之UI组件开发教程
2017/07/03 Javascript
利用jQuery+localStorage实现一个简易的计时器示例代码
2017/12/25 jQuery
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
webpack项目轻松混用css module的方法
2018/06/12 Javascript
支付宝小程序自定义弹窗dialog插件的实现代码
2018/11/30 Javascript
使用Angular自定义字段校验指令的方法示例
2019/02/01 Javascript
Node.js事件的正确使用方法
2019/04/05 Javascript
详解关于webpack多入口热加载很慢的原因
2019/04/24 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
openlayers实现地图弹窗
2020/09/25 Javascript
视觉直观感受若干常用排序算法
2017/04/13 Python
Python利用字典将两个通讯录文本合并为一个文本实例
2018/01/16 Python
python+numpy+matplotalib实现梯度下降法
2018/08/31 Python
python判断文件是否存在,不存在就创建一个的实例
2019/02/18 Python
python导入坐标点的具体操作
2019/05/10 Python
在python中计算ssim的方法(与Matlab结果一致)
2019/12/19 Python
Python *args和**kwargs用法实例解析
2020/03/02 Python
AmazeUI 图标的示例代码
2020/08/13 HTML / CSS
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
动物学专业毕业生求职信
2013/10/11 职场文书
舞蹈教育学专业推荐信
2013/11/27 职场文书
趣味游戏活动方案
2014/02/07 职场文书
幼儿园毕业园长感言
2014/02/24 职场文书
python的netCDF4批量处理NC格式文件的操作方法
2022/03/21 Python