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 相关文章推荐
JQuery CSS样式控制 学习笔记
Jul 23 Javascript
斜45度寻路实现函数
Aug 20 Javascript
json原理分析及实例介绍
Nov 29 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
Apr 02 Javascript
Javascript 浮点运算精度问题分析与解决
Mar 26 Javascript
js滚轮事件兼容性问题需要注意哪些
Nov 15 Javascript
JavaScript字符串对象
Jan 14 Javascript
vue源码入口文件分析(推荐)
Jan 30 Javascript
vue中使用axios post上传头像/图片并实时显示到页面的方法
Sep 27 Javascript
详解Angular5/Angular6项目如何添加热更新(HMR)功能
Oct 10 Javascript
Vue 防止短时间内连续点击后多次触发请求的操作
Nov 11 Javascript
vue里使用create, mounted调用方法
Apr 26 Vue.js
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
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
2014/05/08 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
2016/10/14 PHP
PHP+Ajax无刷新带进度条图片上传示例
2017/02/08 PHP
php实现的双色球算法示例
2017/06/20 PHP
thinkphp5.1框架模板赋值与变量输出示例
2020/05/25 PHP
尽可能写"友好"的"Javascript"代码
2007/01/09 Javascript
Javascript this 关键字 详解
2014/10/22 Javascript
基于jQuery实现的美观星级评论打分组件代码
2015/10/30 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
JavaScript实现星级评价效果
2019/05/17 Javascript
js中let能否完全替代IIFE
2019/06/15 Javascript
如何测量vue应用运行时的性能
2019/06/21 Javascript
Flutter实现仿微信底部菜单栏功能
2019/09/18 Javascript
createObjectURL方法实现本地图片预览
2019/09/30 Javascript
卸载vue2.0并升级vue_cli3.0的实例讲解
2020/02/16 Javascript
Vue实现点击导航栏当前标签后变色功能
2020/08/19 Javascript
从零学Python之入门(四)运算
2014/05/27 Python
举例讲解Python中is和id的用法
2015/04/03 Python
Python 使用os.remove删除文件夹时报错的解决方法
2017/01/13 Python
酷! 程序员用Python带你玩转冲顶大会
2018/01/17 Python
windows下python安装pip图文教程
2018/05/25 Python
Python代码块批量添加Tab缩进的方法
2018/06/25 Python
python实现ip代理池功能示例
2019/07/05 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
2019/10/10 Python
基于Python+Appium实现京东双十一自动领金币功能
2019/10/31 Python
python实现tail -f 功能
2020/01/17 Python
在python中使用pyspark读写Hive数据操作
2020/06/06 Python
python Yaml、Json、Dict之间的转化
2020/10/19 Python
Python非单向递归函数如何返回全部结果
2020/12/18 Python
如何利用Python matplotlib绘制雷达图
2020/12/21 Python
培训协议书范本
2014/04/22 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
初中运动会闭幕词范本3篇
2019/12/09 职场文书
Golang中异常处理机制详解
2021/06/08 Golang