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类中获取外部函数名的方法
Aug 19 Javascript
JS 创建对象(常见的几种方法)
Nov 03 Javascript
jquery创建div 实现代码
Apr 27 Javascript
最常用的12种设计模式小结
Aug 09 Javascript
Javascript和HTML5利用canvas构建Web五子棋游戏实现算法
Jul 17 Javascript
js中Math之random,round,ceil,floor的用法总结
Dec 26 Javascript
JavaScript forEach()遍历函数使用及介绍
Jul 08 Javascript
SWFObject基本用法实例分析
Jul 20 Javascript
基于jQuery的Web上传插件Uploadify使用示例
May 19 Javascript
微信小程序 setData的使用方法详解
Apr 20 Javascript
Vue EventBus自定义组件事件传递
Jun 25 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
Feb 20 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二维/三维数组转字符串
2013/09/13 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
Laravel SQL语句记录方式(推荐)
2016/05/26 PHP
PHP PDOStatement::columnCount讲解
2019/01/30 PHP
php实现映射操作实例详解
2019/10/02 PHP
php ZipArchive实现多文件打包下载实例
2019/10/31 PHP
用js实现随机返回数组的一个元素
2007/08/13 Javascript
javascript 验证日期的函数
2010/03/18 Javascript
基于JQuery实现的Select级联
2014/01/27 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
jQuery实现Tab菜单滚动切换的方法
2015/09/21 Javascript
解决jquery无法找到其他父级子集问题的方法
2016/05/10 Javascript
js实现鼠标左右移动,图片也跟着移动效果
2017/01/25 Javascript
vue的Virtual Dom实现snabbdom解密
2017/05/03 Javascript
基于cropper.js封装vue实现在线图片裁剪组件功能
2018/03/01 Javascript
利用Vconsole和Fillder进行移动端抓包调试方法
2019/03/05 Javascript
Vue axios 将传递的json数据转为form data的例子
2019/10/29 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
2020/04/03 Javascript
[40:27]完美世界DOTA2联赛PWL S3 PXG vs GXR 第一场 12.19
2020/12/24 DOTA
Python实现求两个数组交集的方法示例
2019/02/23 Python
详解Python正则表达式re模块
2019/03/19 Python
我喜欢你 抖音表白程序python版
2019/04/07 Python
python求质数列表的例子
2019/11/24 Python
Python中如何将一个类方法变为多个方法
2019/12/30 Python
Python 调用有道翻译接口实现翻译
2020/03/02 Python
安装多个版本的TensorFlow的方法步骤
2020/04/21 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
如何在python中实现线性回归
2020/08/10 Python
JD Sports澳洲官网:英国领先的运动鞋和运动时尚零售商
2020/02/15 全球购物
小学生我的梦想演讲稿
2014/08/21 职场文书
党政领导班子民主生活会整改措施
2014/09/18 职场文书
财务助理岗位职责范本
2014/10/09 职场文书
2015年后勤工作总结范文
2015/04/08 职场文书
股东协议书范本2016
2016/03/21 职场文书
使用MybatisPlus打印sql语句
2022/04/22 SQL Server
Python可视化神器pyecharts之绘制地理图表练习
2022/07/07 Python