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 相关文章推荐
js prototype 格式化数字 By shawl.qiu
Apr 02 Javascript
Jquery中dialog属性小记
Sep 03 Javascript
使用jquery为table动态添加行的实现代码
Mar 30 Javascript
JavaScript获取图片真实大小代码实例
Sep 24 Javascript
js获取时间精确到秒(年月日)
Mar 16 Javascript
angularJS 如何读写缓冲的方法(推荐)
Aug 06 Javascript
jQuery图片拖动组件Dropzone用法示例
Jan 17 Javascript
js实现延迟加载的几种方法
Apr 24 Javascript
Javascript实现时间倒计时效果
Jul 15 Javascript
vue自定义指令directive实例详解
Jan 17 Javascript
vue+Vue Router多级侧导航切换路由(页面)的实现代码
Dec 20 Javascript
js实现数字跳动到指定数字
Aug 25 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中curl、fsocket、file_get_content三个函数的使用比较
2014/05/09 PHP
php使用mysqli向数据库添加数据的方法
2015/03/20 PHP
php 实现进制相互转换
2016/04/07 PHP
yii2超好用的日期组件和时间组件
2016/05/05 PHP
php静态成员方法和静态的成员属性的使用方法
2017/10/26 PHP
PHP实现的微信公众号扫码模拟登录功能示例
2019/05/30 PHP
Whatever:hover 无需javascript让IE支持丰富伪类
2010/06/29 Javascript
Javascript实现页面跳转的几种方式分享
2013/10/26 Javascript
JavaScript中遍历对象的property的3种方法介绍
2014/12/30 Javascript
JQuery日历插件My97DatePicker日期范围限制
2016/01/20 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
onmouseover事件和onmouseout事件全面理解
2016/08/15 Javascript
Angular 2应用的8个主要构造块有哪些
2016/10/17 Javascript
js实现截图保存图片功能的代码示例
2017/02/16 Javascript
js实现一款简单踩白块小游戏(曾经很火)
2019/12/02 Javascript
[54:02]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 IG vs VGJ.T
2018/04/03 DOTA
python网络编程学习笔记(九):数据库客户端 DB-API
2014/06/09 Python
Python while、for、生成器、列表推导等语句的执行效率测试
2015/06/03 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
Django 5种类型Session使用方法解析
2020/04/29 Python
python爬虫工具例举说明
2020/11/30 Python
你不知道的葡萄干处理法、橙蜜处理法、二氧化碳酵母法
2021/03/17 冲泡冲煮
Html5页面在微信端的分享的实现方法
2018/08/30 HTML / CSS
Html5原创俄罗斯方块(基于canvas)
2019/01/07 HTML / CSS
英国拖鞋购买网站:Bedroom Athletics
2020/02/28 全球购物
人力资源专员岗位职责
2014/01/30 职场文书
销售人员自我评价
2014/02/01 职场文书
国培计划培训感言
2014/03/11 职场文书
项目经理任命书内容
2014/06/06 职场文书
八一建军节演讲稿
2014/09/10 职场文书
领导干部贪图享乐整改措施
2014/09/21 职场文书
营业员岗位职责范本
2015/04/14 职场文书
2015年教师党员承诺书
2015/04/27 职场文书
心理学培训心得体会
2016/01/22 职场文书
安装配置mysql及Navicat prenium的详细流程
2021/06/10 MySQL
MySQL系列之一 MariaDB-server安装
2021/07/02 MySQL