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 相关文章推荐
缓动函数requestAnimationFrame 更好的实现浏览器经动画
Dec 07 Javascript
js控制滚动条缓慢滚动到顶部实现代码
Mar 20 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
Dec 24 Javascript
JavaScript将字符串转换为整数的方法
Apr 14 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
Jan 27 Javascript
canvas实现流星雨的背景效果
Jan 13 Javascript
Vue 过渡(动画)transition组件案例详解
Jan 22 Javascript
xmlplus组件设计系列之按钮(2)
Apr 26 Javascript
基于bootstrap实现多个下拉框同时搜索功能
Jul 19 Javascript
JS使用正则表达式提交页面验证的代码
Oct 16 Javascript
vue 输入电话号码自动按3-4-4分割功能的实现代码
Apr 30 Javascript
js实现限定区域范围拖拉拽效果
Nov 20 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
杏林同学录(七)
2006/10/09 PHP
PHP比较运算符的详细介绍
2015/09/29 PHP
实现WordPress主题侧边栏切换功能的PHP脚本详解
2015/12/14 PHP
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
JavaScript实现复制功能各浏览器支持情况实测
2013/07/18 Javascript
浅析hasOwnProperty方法的应用
2013/11/20 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
详解iview的checkbox多选框全选时校验问题
2019/06/10 Javascript
JavaScript实现消消乐的源代码
2021/01/12 Javascript
[01:49]一目了然!DOTA2DotA快捷操作对比第二弹
2014/05/16 DOTA
Python程序员开发中常犯的10个错误
2014/07/07 Python
Python异常学习笔记
2015/02/03 Python
Python输出汉字字库及将文字转换为图片的方法
2016/06/04 Python
Python 专题六 局部变量、全局变量global、导入模块变量
2017/03/20 Python
使用pyecharts在jupyter notebook上绘图
2020/04/23 Python
Python实现判断一行代码是否为注释的方法
2018/05/23 Python
十行代码使用Python写一个USB病毒
2019/06/21 Python
Python读取YAML文件过程详解
2019/12/30 Python
pytorch sampler对数据进行采样的实现
2019/12/31 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
python 用opencv实现图像修复和图像金字塔
2020/11/27 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
HTML5实现的震撼3D焦点图动画的示例代码
2019/09/26 HTML / CSS
HTML5 body设置全屏背景图片的示例代码
2020/12/08 HTML / CSS
世界上最大的糖果店:Dylan’s Candy Bar
2017/11/07 全球购物
网站域名和主机:Domain.com
2019/04/01 全球购物
Berghaus官网:户外服装和设备,防水服
2020/01/17 全球购物
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
四种会话跟踪技术
2015/05/20 面试题
员工拾金不昧表扬信
2014/01/09 职场文书
小学生成长感言
2014/01/30 职场文书
销售经理岗位职责
2014/03/16 职场文书
nginx反向代理时如何保持长连接
2021/03/31 Servers
Pandas-DataFrame知识点汇总
2022/03/16 Python