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 相关文章推荐
浏览器无法运行JAVA脚本的解决方法
Jan 09 Javascript
document.documentElement的一些使用技巧
Apr 18 Javascript
JS实现的省份级联实例代码
Jun 24 Javascript
js的flv视频播放器插件使用方法
Jun 23 Javascript
详解JavaScript的Polymer框架中的通知交互
Jul 29 Javascript
js限制文本框的输入内容代码分享(3类)
Aug 20 Javascript
JS原型对象的创建方法详解
Jun 16 Javascript
微信小程序 视图层(xx.xml)和逻辑层(xx.js)详细介绍
Oct 13 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
Aug 23 Javascript
微信小程序 image组件遇到的问题
May 28 Javascript
Vue组件之高德地图地址选择功能的实例代码
Jun 21 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
Jul 18 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
使用数据库保存session的方法
2006/10/09 PHP
php函数重载的替代方法--伪重载详解
2015/05/08 PHP
基于PHP如何把汉字转化为拼音
2015/12/11 PHP
php简单实现数组分页的方法
2016/04/30 PHP
php实现微信扫码自动登陆与注册功能
2016/09/22 PHP
jquery 必填项判断表单是否为空的方法
2008/09/14 Javascript
JavaScript 学习笔记(四)
2009/12/31 Javascript
jquery 添加节点的几种方法介绍
2013/09/04 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
2015/10/29 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
2016/08/27 Javascript
浅谈js数据类型判断与数组判断
2016/08/29 Javascript
Bootstrap轮播插件使用代码
2016/10/11 Javascript
Ajax实现不刷新取最新商品
2017/03/01 Javascript
JS字符串长度判断,超出进行自动截取的实例(支持中文)
2017/03/06 Javascript
C#微信小程序服务端获取用户解密信息实例代码
2017/03/10 Javascript
ES6新特性之解构、参数、模块和记号用法示例
2017/04/01 Javascript
解决webpack -p压缩打包react报语法错误的方法
2017/07/03 Javascript
node.js基于express使用websocket的方法
2017/11/09 Javascript
JS出现404错误原理及解决方案
2020/07/01 Javascript
使用Python下载歌词并嵌入歌曲文件中的实现代码
2015/11/13 Python
python Crypto模块的安装与使用方法
2017/12/21 Python
python判断文件是否存在,不存在就创建一个的实例
2019/02/18 Python
keras的backend 设置 tensorflow,theano操作
2020/06/30 Python
使用Keras训练好的.h5模型来测试一个实例
2020/07/06 Python
Python如何读取、写入JSON数据
2020/07/28 Python
Otel.com:折扣酒店预订
2017/08/24 全球购物
怎么写有吸引力的自荐信
2013/11/17 职场文书
土木建筑学生自我评价
2014/01/14 职场文书
施工安全承诺书
2014/05/22 职场文书
物流专业自荐信
2014/05/23 职场文书
学习“七一”讲话精神体会
2014/07/08 职场文书
2014三年级班主任工作总结
2014/12/05 职场文书
初中毕业生感言
2015/07/31 职场文书
2019年度行政文员工作计划范本!
2019/07/04 职场文书
Python matplotlib绘制雷达图
2022/04/13 Python