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 继承的实现
Jul 09 Javascript
jquery.post用法示例代码
Jan 03 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
Aug 10 Javascript
纯javascript判断查询日期是否为有效日期
Aug 24 Javascript
js操作XML文件的实现方法兼容IE与FireFox
Jun 25 Javascript
卸载安装Node.js与npm过程详解
Aug 15 Javascript
浅析如何利用JavaScript进行语音识别
Oct 27 Javascript
原生js和css实现图片轮播效果
Feb 07 Javascript
jQuery实现级联下拉框实战(5)
Feb 08 Javascript
javascript事件的传播基础实例讲解(35)
Feb 14 Javascript
Ionic项目中Native Camera的使用方法
Jun 07 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
Aug 02 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
一个MYSQL操作类
2006/11/16 PHP
修改php.ini以达到屏蔽错误信息并记录日志
2013/06/16 PHP
Laravel 5 框架入门(三)
2015/04/09 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
帝国cms目录结构分享
2015/07/06 PHP
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
2007/01/16 Javascript
Packer 3.0 JS压缩及混淆工具 下载
2007/05/03 Javascript
JavaScript中实现sprintf、printf函数
2015/01/27 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
使用递归遍历对象获得value值的实现方法
2016/06/14 Javascript
AngularJS 入门教程之HTML DOM实例详解
2016/07/28 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
2016/10/20 Javascript
Bootstrap源码解读下拉菜单(4)
2016/12/23 Javascript
微信小程序新增的拖动组件movable-view使用教程
2017/05/20 Javascript
vue移动端实现下拉刷新
2018/04/22 Javascript
Bootstrap table表格初始化表格数据的方法
2018/07/25 Javascript
利用原生JavaScript实现造日历轮子实例代码
2019/05/08 Javascript
python利用elaphe制作二维条形码实现代码
2012/05/25 Python
Python数据结构之图的应用示例
2018/05/11 Python
Python中使用Counter进行字典创建以及key数量统计的方法
2018/07/06 Python
python3 面向对象__类的内置属性与方法的实例代码
2018/11/09 Python
Python通过paramiko远程下载Linux服务器上的文件实例
2018/12/27 Python
selenium+python自动化测试之鼠标和键盘事件
2019/01/23 Python
python中return的返回和执行实例
2019/12/24 Python
python 获取当前目录下的文件目录和文件名实例代码详解
2020/03/10 Python
利用Python将多张图片合成视频的实现
2020/11/23 Python
世界最大的私人旅行指南出版商:孤独星球
2016/08/23 全球购物
经贸韩语专业大学生职业规划
2014/02/14 职场文书
上课打牌的检讨书
2014/02/15 职场文书
运动会通讯稿200字
2014/02/16 职场文书
幼教求职信
2014/03/12 职场文书
职工代表大会主持词
2014/04/01 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
商业门面租房协议书
2014/11/25 职场文书
财产保全担保书
2015/01/20 职场文书
公司员工体检通知
2015/04/21 职场文书