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下操作css的float属性的特殊写法
Aug 22 Javascript
SuperSlide2实现图片滚动特效
Jun 20 Javascript
arguments对象验证函数的参数是否合法
Jun 26 Javascript
JS+CSS实现的简单折叠展开多级菜单效果
Sep 12 Javascript
JavaScript数值千分位格式化的两种简单实现方法
Aug 01 Javascript
Bootstrap3 模态框使用实例
Feb 22 Javascript
详解本地Node.js服务器作为api服务器的解决办法
Feb 28 Javascript
jQuery图片缩放插件smartZoom使用实例详解
Aug 25 jQuery
vue router自动判断左右翻页转场动画效果
Oct 10 Javascript
JavaScript隐式类型转换代码实例
May 29 Javascript
基于VSCode调试网页JavaScript代码过程详解
Jul 20 Javascript
JavaScript数组 几个常用方法总结
Nov 11 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基础知识:类与对象(2) 自动加载对象
2006/12/13 PHP
PHP EOT定界符的使用详解
2008/09/30 PHP
fleaphp rolesNameField bug解决方法
2011/04/23 PHP
用PHP的超级变量$_GET获取HTML表单(Form) 数据
2011/05/07 PHP
php获取当前页面完整URL地址
2015/12/30 PHP
解析 thinkphp 框架中的部分方法
2017/05/07 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
2019/04/10 PHP
yii2 开发api接口时优雅的处理全局异常的方法
2019/05/14 PHP
JS/FLASH实现复制代码到剪贴板(兼容所有浏览器)
2013/05/27 Javascript
javascript从右边截取指定字符串的三种实现方法
2013/11/29 Javascript
浅谈JavaScript中Date(日期对象),Math对象
2015/02/05 Javascript
JAVA Web实时消息后台服务器推送技术---GoEasy
2016/11/04 Javascript
JavaScript仿微博输入框效果(案例分析)
2016/12/06 Javascript
微信小程序(三):网络请求
2017/01/13 Javascript
jQuery中绑定事件bind() on() live() one()的异同
2017/02/23 Javascript
Angular4开发解决跨域问题详解
2017/08/28 Javascript
Vue组件之单向数据流的解决方法
2018/11/10 Javascript
关于React动态加载路由处理的相关问题
2019/01/07 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
2019/03/07 Javascript
Vue传参一箩筐(页面、组件)
2019/04/04 Javascript
复习Python中的字符串知识点
2015/04/14 Python
Saltstack快速入门简单汇总
2016/03/01 Python
python学习 流程控制语句详解
2016/06/01 Python
python 专题九 Mysql数据库编程基础知识
2017/03/16 Python
python中文件变化监控示例(watchdog)
2017/10/16 Python
python探索之BaseHTTPServer-实现Web服务器介绍
2017/10/28 Python
Python简单实现网页内容抓取功能示例
2018/06/07 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
2018/08/22 Python
美国第一个网上卖鞋零售商:OnlineShoes.com
2017/09/24 全球购物
iPad和Surface Pro蓝牙键盘:Brydge
2018/11/10 全球购物
工商管理专业实习生自我鉴定
2013/09/29 职场文书
采购主管岗位职责
2014/02/01 职场文书
小学生家长寄语
2014/04/02 职场文书
《金子》教学反思
2014/04/13 职场文书
环境保护标语
2014/06/20 职场文书
统计员岗位职责
2015/02/11 职场文书