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中的注释使用与注意事项小结
Sep 20 Javascript
jquery获取div距离窗口和父级dv的距离示例
Oct 10 Javascript
jquery选择器之属性过滤选择器详解
Jan 27 Javascript
jQuery带箭头提示框tooltips插件集锦
Nov 17 Javascript
JavaScript中string转换成number介绍
Dec 31 Javascript
JavaScript 学习笔记之操作符
Jan 14 Javascript
js比较日期大小的方法
May 12 Javascript
jQuery实现可高亮显示的二级CSS菜单效果
Sep 01 Javascript
AngularJS 中文API参考手册
Jul 28 Javascript
Node.js用readline模块实现输入输出
Dec 16 Javascript
vue+swiper实现侧滑菜单效果
Dec 28 Javascript
js动态生成表格(节点操作)
Jan 12 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 获取客户端的真实ip
2009/11/30 PHP
如何使用jQuery+PHP+MySQL来实现一个在线测试项目
2015/04/26 PHP
PHP文件上传处理案例分析
2016/10/15 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
2018/04/08 PHP
JavaScript中几种常见排序算法小结
2011/02/22 Javascript
用JS做的简单的可折叠的两级树形菜单
2013/09/21 Javascript
剖析Node.js异步编程中的回调与代码设计模式
2016/02/16 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
[js高手之路]图解javascript的原型(prototype)对象,原型链实例
2017/08/28 Javascript
JS实现判断图片是否加载完成的方法分析
2018/07/31 Javascript
AngularJS上传文件的示例代码
2018/11/10 Javascript
图片文字识别(OCR)插件Ocrad.js教程
2018/11/26 Javascript
JavaScript设计模式之装饰者模式实例详解
2019/01/17 Javascript
Vue入门学习笔记【基本概念、对象、过滤器、指令等】
2019/04/13 Javascript
学习RxJS之JavaScript框架Cycle.js
2019/06/17 Javascript
JavaScript判断浏览器运行环境的详细方法
2019/06/30 Javascript
jQuery实现的解析本地 XML 文档操作示例
2020/04/30 jQuery
Vue实现指令式动态追加小球动画组件的步骤
2020/12/18 Vue.js
js实现随机点名
2021/01/19 Javascript
Python通过正则表达式选取callback的方法
2015/07/18 Python
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
详解Python中的四种队列
2018/05/21 Python
在python 不同时区之间的差值与转换方法
2019/01/14 Python
TensorFlow加载模型时出错的解决方式
2020/02/06 Python
Python如何向SQLServer存储二进制图片
2020/06/08 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
2020/11/18 Python
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
澳洲在线厨具商店:Kitchen Style
2018/05/05 全球购物
毕业生如何写自我鉴定
2014/03/15 职场文书
主持人演讲稿
2014/05/13 职场文书
学生上课看漫画的检讨书
2014/09/26 职场文书
2014年会计工作总结
2014/11/27 职场文书
python爬虫之selenium库的安装及使用教程
2021/05/23 Python
React四级菜单的实现
2022/04/08 Javascript
ORACLE中dbms_output.put_line输出问题的解决过程
2022/06/28 Oracle