js单例模式详解实例


Posted in Javascript onNovember 21, 2013

什么是单例?

单例要求一个类有且只有一个实例,提供一个全局的访问点。因此它要绕过常规的控制器,使其只能有一个实例,供使用者使用,而使用着不关心有几个实例,因此这是设计者的责任

In JavaScript, Singletons serve as a shared resource namespace which isolate implementation code from the global namespace so as to provide a single point of access for functions.

在javascript中,单例被当做一个全局的命名空间,提供一个访问该对象的一个点。

使用场景

In practice, the Singleton pattern is useful when exactly one object is needed to coordinate others across a system.

单例比较适用于一个对象和其他系统进行交互。

类比

单例有点类似于一个小组的小组长,在一段时间内只有一个小组长,有小组长来指定组员的工作,分配和协调和组员的工作。

实例1:这个是最简单的单例,通过key,value的形式存储属性和方法

var A = {
   xx:3,
   yy:4,
   B:function(el){   },
   C:function(el){
   },
   D:function(el){
   },
   E:function(el){
   }
}

实例2:首先创建一个实例的引用,然后判断这个实例是否存在,如果不存在那么就创建,存在的话,就直接返回,保证有且只有一个。

var mySingleton = (function () {
// Instance 存储一个单例实例的引用
var instance;
function init() {
// Singleton
// 私有的方法和变量
function privateMethod(){
    console.log( "I am private" );
}
var privateVariable = "Im also private";
return {
  // 共有的方法和变量
  publicMethod: function () {
    console.log( "The public can see me!" );
  },
  publicProperty: "I am also public"
};
};
return {
// 如果实例不存在,那么创建一个
getInstance: function () {
  if ( !instance ) {
    instance = init();
  }
  return instance;
}
};
})();
var singleA = mySingleton;
var singleB = mySingleton;
console.log( singleA === singleB ); // true

实例3:

var SingletonTester = (function () {
  // options: an object containing configuration options for the singleton
  // e.g var options = { name: "test", pointX: 5}; 
  function Singleton( options )  {
    // set options to the options supplied
    // or an empty object if none are provided
    options = options || {};
    // set some properties for our singleton
    this.name = "SingletonTester";
    this.pointX = options.pointX || 6;
    this.pointY = options.pointY || ; 
  }
  // our instance holder 
  var instance;
  // an emulation of static variables and methods
  var _static  = {  
    name:  "SingletonTester",
    // Method for getting an instance. It returns
    // a singleton instance of a singleton object
    getInstance:  function( options ) {   
      if( instance  ===  undefined )  {    
        instance = new Singleton( options );   
      }   
        return  instance;      
    } 
  }; 
  return  _static;
})();
var singletonTest  =  SingletonTester.getInstance({
  pointX:  5
});
// Log the output of pointX just to verify it is correct
// Outputs: 5
console.log( singletonTest.pointX );
Javascript 相关文章推荐
JS中动态添加事件(绑定事件)的代码
Jan 09 Javascript
通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
May 07 Javascript
jQuery循环滚动展示代码 可应用到文字和图片上
May 11 Javascript
JavaScript实现快速排序(自已编写)
Dec 19 Javascript
jQuery模拟超链接点击效果代码
Apr 21 Javascript
javascript动态控制服务器控件实例
Sep 05 Javascript
JS实现同时搜索百度和必应的方法
Jan 27 Javascript
Node.js 日志处理模块log4js
Aug 28 Javascript
基于javascript的Form表单验证
Dec 29 Javascript
基于JavaScript实现窗口拖动效果
Jan 18 Javascript
Bootstrap缩略图的创建方法
Mar 22 Javascript
浅析vue-router jquery和params传参(接收参数)$router $route的区别
Aug 03 jQuery
Ajax同步与异步传输的示例代码
Nov 21 #Javascript
jquery与prototype框架的详细对比
Nov 21 #Javascript
Tab切换组件(选项卡功能)实例代码
Nov 21 #Javascript
JS仿百度搜索自动提示框匹配查询功能
Nov 21 #Javascript
探讨javascript是不是面向对象的语言
Nov 21 #Javascript
JS中把字符转成ASCII值的函数示例代码
Nov 21 #Javascript
Javascript对象属性方法汇总
Nov 21 #Javascript
You might like
PHP处理postfix邮件内容的方法
2015/06/16 PHP
PHP中TP5 上传文件的实例详解
2017/07/31 PHP
PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】
2020/05/29 PHP
javascript 写类方式之五
2009/07/05 Javascript
JS学习之一个简易的日历控件
2010/03/24 Javascript
js实现二代身份证号码验证详解
2014/11/20 Javascript
Jquery中offset()和position()的区别分析
2015/02/05 Javascript
jQuery实现个性翻牌效果导航菜单的方法
2015/03/09 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
2015/03/31 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
2015/10/29 Javascript
JavaScript实现Fly Bird小游戏
2016/12/15 Javascript
JS中showModalDialog关闭子窗口刷新主窗口用法详解
2017/03/25 Javascript
Angular实现的table表格排序功能完整示例
2017/12/22 Javascript
Vue.js添加组件操作示例
2018/06/13 Javascript
[56:18]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python学习手册中的python多态示例代码
2014/01/21 Python
在Python中操作时间之strptime()方法的使用
2020/12/30 Python
Python学习笔记之if语句的使用示例
2017/10/23 Python
Python实现ping指定IP的示例
2018/06/04 Python
Kali Linux安装ipython2 和 ipython3的方法
2019/07/11 Python
Django实现文章详情页面跳转代码实例
2020/09/16 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
2020/10/28 Python
关于 HTML5 的七个传说小结
2012/04/12 HTML / CSS
浅谈html5标签css3的常用样式
2016/10/20 HTML / CSS
匡威意大利官方商店 :Converse意大利
2018/11/27 全球购物
Huda Beauty官方商店:化妆和美容产品
2020/09/05 全球购物
急诊科护士自我鉴定
2013/10/14 职场文书
大学生怎样进行自我评价
2013/12/07 职场文书
小孩百日宴答谢词
2014/01/15 职场文书
市场开发计划书
2014/05/07 职场文书
2014小学数学教研组工作总结
2014/12/06 职场文书
巾帼文明岗事迹材料
2014/12/24 职场文书
2015年党风廉政建设责任书
2015/01/29 职场文书
法院个人总结
2015/03/03 职场文书
Jupyter notebook 更改文件打开的默认路径操作
2021/05/21 Python
sql注入教程之类型以及提交注入
2021/08/02 MySQL