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 textarea光标定位方法(兼容IE和FF)
Mar 12 Javascript
JavaScript实现自己的DOM选择器原理及代码
Mar 04 Javascript
Node.js插件的正确编写方式
Aug 03 Javascript
jQuery表格插件datatables用法总结
Sep 05 Javascript
DOM节点深度克隆函数cloneNode()用法实例
Jan 12 Javascript
JS实现5秒钟自动封锁div层的方法
Feb 20 Javascript
JavaScript知识点整理
Dec 09 Javascript
关于vue-router的beforeEach无限循环的问题解决
Sep 09 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
Feb 27 jQuery
vue实现图片懒加载的方法分析
Feb 05 Javascript
JS+css3实现幻灯片轮播图
Aug 14 Javascript
jQuery ajax - getScript() 方法和getJSON方法
May 14 jQuery
超级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 mysql与mysqli事务使用说明 分享
2013/08/17 PHP
WordPress开发中短代码的实现及相关函数使用技巧
2016/01/05 PHP
游戏人文件夹程序 ver 3.0
2006/07/14 Javascript
javascript eval函数深入认识
2009/02/21 Javascript
jquery js 获取时间差、时间格式具体代码
2013/06/05 Javascript
Nodejs使用mysql模块之获得更新和删除影响的行数的方法
2014/03/18 NodeJs
学习Javascript面向对象编程之封装
2016/02/23 Javascript
Reactjs实现通用分页组件的实例代码
2017/01/19 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
seajs中模块依赖的加载处理实例分析
2017/10/10 Javascript
仿京东快报向上滚动的实例
2017/12/13 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
Python实现字典的key和values的交换
2015/08/04 Python
python黑魔法之编码转换
2016/01/25 Python
Python实现简单的获取图片爬虫功能示例
2017/07/12 Python
Python实现的直接插入排序算法示例
2018/04/29 Python
Python设计模式之解释器模式原理与用法实例分析
2019/01/10 Python
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
Python3调用百度AI识别图片中的文字功能示例【测试可用】
2019/03/13 Python
Python:__eq__和__str__函数的使用示例
2020/09/26 Python
Bally美国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/18 全球购物
澳大利亚购买最佳炊具品牌网站:Cookware Brands
2019/02/16 全球购物
美国正宗设计师眼镜在线零售商:EYEZZ
2019/03/23 全球购物
什么是事务?为什么需要事务?
2012/01/09 面试题
XML文档面试题
2015/08/05 面试题
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2014/07/21 面试题
会计职业生涯规划范文
2014/01/04 职场文书
军训拉歌口号
2014/06/13 职场文书
大学生联谊活动策划书(光棍节)
2014/10/10 职场文书
三方股东合作协议书
2014/10/28 职场文书
2014年信用社工作总结
2014/11/25 职场文书
关于 Python json中load和loads区别
2021/11/07 Python
分享7个 Python 实战项目练习
2022/03/03 Python
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android