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表单常用验证集合
Jan 16 Javascript
js replace 与replaceall实例用法详解
Aug 03 Javascript
jQuery实现倒计时按钮功能代码分享
Sep 03 Javascript
JS实现图片放大镜效果的方法
Feb 27 Javascript
JavaScript 最佳实践:帮你提升代码质量
Dec 03 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
May 11 Javascript
基于对象合并功能的实现示例
Oct 10 Javascript
element-ui upload组件多文件上传的示例代码
Oct 17 Javascript
Vue运用transition实现过渡动画
May 06 Javascript
vue组件 keep-alive 和 transition 使用详解
Oct 11 Javascript
Javascript中Math.max和Math.max.apply的区别和用法详解
Aug 24 Javascript
javascript代码简写的几种常用方式汇总
Aug 23 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的论坛(7)
2006/10/09 PHP
PHP中的cookie
2006/11/26 PHP
php删除数组中重复元素的方法
2015/12/22 PHP
javascript 带有滚动条的表格,标题固定,带排序功能.
2009/11/13 Javascript
jquery动态增加删减表格行特效
2015/11/20 Javascript
浅析AngularJS Filter用法
2015/12/28 Javascript
jquery自定义插件开发之window的实现过程
2016/05/06 Javascript
Jquery on方法绑定事件后执行多次的解决方法
2016/06/02 Javascript
JS实现仿百度文库评分功能
2017/01/12 Javascript
微信小程序如何获知用户运行小程序的场景教程
2017/05/17 Javascript
AngularJS ng-repeat指令及Ajax的应用实例分析
2017/07/06 Javascript
Angular动态绑定样式及改变UI框架样式的方法小结
2018/09/03 Javascript
vue中的ref和$refs的使用
2018/11/22 Javascript
Vue.js上传图片到阿里云OSS存储的方法示例
2018/12/13 Javascript
微信小程序 授权登录详解(附完整源码)
2019/08/23 Javascript
微信小程序引入VANT组件的方法步骤
2019/09/19 Javascript
[01:12:53]完美世界DOTA2联赛PWL S2 Forest vs SZ 第一场 11.25
2020/11/26 DOTA
Python编程实现的简单Web服务器示例
2017/06/22 Python
使用Django和Python创建Json response的方法
2018/03/26 Python
python中将zip压缩包转为gz.tar的方法
2018/10/18 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
Python定义函数时参数有默认值问题解决
2019/12/19 Python
Python多线程:主线程等待所有子线程结束代码
2020/04/25 Python
Python自动化xpath实现自动抢票抢货
2020/09/19 Python
基于python实现百度语音识别和图灵对话
2020/11/02 Python
如何创建一个Flask项目并进行简单配置
2020/11/18 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
2020/12/14 Python
html5声频audio和视频video等新特性详细说明
2012/12/26 HTML / CSS
GWebs公司笔试题
2012/05/04 面试题
销售顾问的岗位职责
2013/11/13 职场文书
交通事故委托书范本精选
2014/10/04 职场文书
市委常委会班子党的群众路线教育实践活动整改方案
2014/10/25 职场文书
公司趣味运动会开幕词
2016/03/04 职场文书
婚礼必备主持词范本!
2019/07/23 职场文书
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
2021/04/13 Javascript
redis通过6379端口无法连接服务器(redis-server.exe闪退)
2021/05/08 Redis