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 相关文章推荐
[原创]推荐10款最热门jQuery UI框架
Aug 19 Javascript
JS动态加载当前时间的方法
Feb 09 Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
Apr 25 Javascript
教你使用javascript简单写一个页面模板引擎
May 05 Javascript
简介EasyUI datagrid editor combogrid搜索框的实现
Apr 01 Javascript
全面理解JavaScript中的继承(必看)
Jun 16 Javascript
js选项卡的制作方法
Jan 23 Javascript
微信小程序template模板实例详解
Oct 27 Javascript
Vue 菜单栏点击切换单个class(高亮)的方法
Aug 22 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
Sep 12 Javascript
Javascript 模拟mvc实现点餐程序案例详解
Dec 24 Javascript
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
Jan 22 Vue.js
超级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实现抓取HTTPS内容
2014/12/01 PHP
php简单判断两个字符串是否相等的方法
2015/07/13 PHP
微信支付开发告警通知实例
2016/07/12 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
PHP数据源架构模式之表入口模式实例分析
2020/01/23 PHP
Jquery 弹出层插件实现代码
2009/10/24 Javascript
jQuery数组处理代码详解(含实例演示)
2012/02/03 Javascript
你必须知道的JavaScript 中字符串连接的性能的一些问题
2013/05/07 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
举例讲解AngularJS中的模块
2015/06/17 Javascript
MUI 上拉刷新/下拉加载功能实例代码
2017/04/13 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
JavaScript的Object.defineProperty详解
2018/07/09 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
2019/02/28 Javascript
vue-router 前端路由之路由传值的方式详解
2019/04/30 Javascript
微信小程序Echarts覆盖正常组件问题解决
2019/07/13 Javascript
vue实现一个矩形标记区域(rectangle marker)的方法
2020/10/28 Javascript
vue 解决provide和inject响应的问题
2020/11/12 Javascript
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
使用Python编写一个简单的tic-tac-toe游戏的教程
2015/04/16 Python
python获取一组汉字拼音首字母的方法
2015/07/01 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
2017/03/16 Python
Python 3.6 -win64环境安装PIL模块的教程
2019/06/20 Python
python使用requests.session模拟登录
2019/08/09 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
详解Python3中的 input() 函数
2020/03/18 Python
增大python字体的方法步骤
2020/07/05 Python
解决python运行效率不高的问题
2020/07/20 Python
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
如何判断计算机可能已经中马
2013/03/22 面试题
个人评语大全
2014/05/04 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
新员工入职欢迎词
2015/01/23 职场文书
2019年教师节:送给所有老师的祝福语
2019/09/05 职场文书
win11无法添加打印机怎么办? 提示windows无法打开添加打印机的解决办法
2022/04/05 数码科技
深入理解 Golang 的字符串
2022/05/04 Golang