JavaScript 设计模式学习 Singleton


Posted in Javascript onJuly 27, 2009
/* Basic Singleton. */ 
var Singleton = { 
attribute1: true, 
attribute2: 10, 
method1: function() { 
}, 
method2: function(arg) { 
} 
}; 
单件模式最主要的用途之一就是命名空间: 
/* GiantCorp namespace. */ 
var GiantCorp = {}; 
GiantCorp.Common = { 
// A singleton with common methods used by all objects and modules. 
}; 
GiantCorp.ErrorCodes = { 
// An object literal used to store data. 
}; 
GiantCorp.PageHandler = { 
// A singleton with page specific methods and attributes. 
}; 
利用闭包在单件模式中实现私有方法和私有变量: 
GiantCorp.DataParser = (function() { 
// Private attributes. 
var whitespaceRegex = /\s+/; 
// Private methods. 
function stripWhitespace(str) { 
return str.replace(whitespaceRegex, ''); 
} 
function stringSplit(str, delimiter) { 
return str.split(delimiter); 
} 
// Everything returned in the object literal is public, but can access the 
// members in the closure created above. 
return { 
// Public method. 
stringToArray: function(str, delimiter, stripWS) { 
if(stripWS) { 
str = stripWhitespace(str); 
} 
var outputArray = stringSplit(str, delimiter); 
return outputArray; 
} 
}; 
})(); // Invoke the function and assign the returned object literal to 
// GiantCorp.DataParser. 
实现Lazy Instantiation 单件模式: 
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; 
} 
} 
})(); 
MyNamespace.Singleton.getInstance().publicMethod1();
Javascript 相关文章推荐
javascript深入理解js闭包
Jul 03 Javascript
基于Jquery 解决Ajax请求的页面 浏览器后退前进功能,页面刷新功能实效问题
Dec 11 Javascript
stream.js 一个很小、完全独立的Javascript类库
Oct 28 Javascript
JavaScript中的变量声明早于赋值分析
Mar 01 Javascript
基于Unit PNG Fix.js有时候在ie6下不正常的解决办法
Jun 26 Javascript
JavaScript判断文件上传类型的方法
Sep 02 Javascript
javascript中Function类型详解
Apr 28 Javascript
JQuery实现网页右侧随动广告特效
Jan 17 Javascript
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
Feb 21 Javascript
在Vue中使用Compass的方法
Mar 02 Javascript
微信小程序 wxParse插件显示视频问题
Sep 27 Javascript
angula中使用iframe点击后不执行变更检测的问题
May 10 Javascript
xml 封装与解析(javascript和C#中)
Jul 26 #Javascript
JavaScript 捕获窗口关闭事件
Jul 26 #Javascript
jquery tools之tooltip
Jul 25 #Javascript
jquery tools之tabs 选项卡/页签
Jul 25 #Javascript
jquery JSON的解析方式
Jul 25 #Javascript
jqPlot Option配置对象详解
Jul 25 #Javascript
jqPlot jquery的页面图表绘制工具
Jul 25 #Javascript
You might like
mysql建立外键
2006/11/25 PHP
过滤掉PHP数组中的重复值的实现代码
2011/07/17 PHP
php将远程图片保存到本地服务器的实现代码
2015/08/03 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
2016/07/23 PHP
PHP仿微信发红包领红包效果
2016/10/30 PHP
js 图片轮播(5张图片)
2008/12/30 Javascript
Jquery 的outerHeight方法使用介绍
2013/09/11 Javascript
浅析js中的浮点型运算问题
2014/01/06 Javascript
js window.onload 加载多个函数和追加函数详解
2014/01/08 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
2014/01/11 Javascript
javascript与有限状态机详解
2014/05/08 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
node+express+ejs使用模版引擎做的一个示例demo
2017/09/18 Javascript
json数据传到前台并解析展示成列表的方法
2018/08/06 Javascript
如何使用pm2快速将项目部署到远程服务器
2019/03/12 Javascript
深入理解Node内建模块和对象
2019/03/12 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
2019/04/25 Javascript
javascript实现5秒倒计时并跳转功能
2019/06/20 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
2019/09/16 Javascript
Python实现Logger打印功能的方法详解
2017/09/01 Python
Python基于pygame模块播放MP3的方法示例
2017/09/30 Python
对python 各种删除文件失败的处理方式分享
2018/04/24 Python
python实现屏保计时器的示例代码
2018/08/08 Python
使用Python的SymPy库解决数学运算问题的方法
2019/03/27 Python
Python 使用 attrs 和 cattrs 实现面向对象编程的实践
2019/06/12 Python
pyqt5 删除layout中的所有widget方法
2019/06/25 Python
树莓派使用python-librtmp实现rtmp推流h264的方法
2019/07/22 Python
python 解决pycharm运行py文件只有unittest选项的问题
2020/09/01 Python
python爬虫请求头的使用
2020/12/01 Python
激光脱毛、蓝光和护肤:Tria Beauty
2019/03/28 全球购物
什么是命名空间(NameSpace)
2015/11/24 面试题
文秘人员工作职责
2014/01/31 职场文书
期中考试复习计划
2015/01/19 职场文书
大学生预备党员自我评价
2015/03/04 职场文书
试用期解除劳动合同通知书
2015/04/16 职场文书
Python自动化之批量处理工作簿和工作表
2021/06/03 Python