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制作经典传统的拼图游戏
Mar 22 Javascript
bootstrap网页框架的使用方法
May 10 Javascript
JavaScript中判断数据类型的方法总结
May 24 Javascript
jQuery删除当前节点元素
Dec 07 Javascript
Angular2使用jQuery的方法教程
May 28 jQuery
详解基于 Nuxt 的 Vue.js 服务端渲染实践
Oct 24 Javascript
Vue.js组件间的循环引用方法示例
Dec 27 Javascript
React diff算法的实现示例
Apr 20 Javascript
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
Aug 29 Javascript
解决jquery validate 验证不通过后验证正确的信息仍残留在label上的方法
Aug 27 jQuery
JavaScript获取时区实现过程解析
Sep 24 Javascript
7个你应该知道的JS原生错误类型
Apr 29 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中ob(Output Buffer 输出缓冲)函数使用方法
2007/07/21 PHP
PHP Google的translate API代码
2008/12/10 PHP
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
JS获取scrollHeight问题想到的标准问题
2007/05/27 Javascript
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
JS模板实现方法
2013/04/03 Javascript
多种方法判断Javascript对象是否存在
2013/09/22 Javascript
将input file的选择的文件清空的两种解决方案
2013/10/21 Javascript
jquery live()重复绑定的解决方法介绍
2014/01/03 Javascript
js加密解密字符串可自定义密码因子
2014/05/13 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
AngularJS快速入门
2015/04/02 Javascript
针对初学者的jQuery入门指南
2015/08/15 Javascript
vue.js 表格分页ajax 异步加载数据
2016/10/18 Javascript
JS 数组随机洗牌的实例代码
2018/09/12 Javascript
基于JavaScript实现一个简单的Vue
2018/09/26 Javascript
jquery实现抽奖功能
2020/10/22 jQuery
vue+vant实现购物车全选和反选功能
2020/11/17 Vue.js
Python写的贪吃蛇游戏例子
2014/06/16 Python
python实现的简单抽奖系统实例
2015/05/22 Python
python2.7安装图文教程
2018/03/13 Python
十分钟利用Python制作属于你自己的个性logo
2018/05/07 Python
Python实现读写INI配置文件的方法示例
2018/06/09 Python
Python数据预处理之数据规范化(归一化)示例
2019/01/08 Python
pandas 如何分割字符的实现方法
2019/07/29 Python
Python读取实时数据流示例
2019/12/02 Python
简单了解django文件下载方式
2020/02/10 Python
pycharm-professional-2020.1下载与激活的教程
2020/09/21 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
Ticketmaster德国票务网站:购买音乐会和体育等门票
2016/11/14 全球购物
香港士多网上超级市场:Ztore
2021/01/09 全球购物
请写出 BOOL flag 与"零值"比较的 if 语句
2016/02/29 面试题
关于圣诞节的广播稿
2014/01/26 职场文书
高三高考决心书
2014/03/11 职场文书
单位未婚证明范本
2014/11/25 职场文书
房屋认购协议书
2015/01/29 职场文书