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 相关文章推荐
JavaScript 高效运行代码分析
Mar 18 Javascript
Javascript Function对象扩展之延时执行函数
Jul 06 Javascript
js控制CSS样式属性语法对照表
Dec 11 Javascript
谈谈JavaScript中的函数与闭包
Apr 14 Javascript
php 中序列化和json使用介绍
Jul 08 Javascript
jQuery1.9.1针对checkbox的调整方法(prop)
May 01 Javascript
javascript实现rgb颜色转换成16进制格式
Jul 10 Javascript
Angularjs通过指令监听ng-repeat渲染完成后执行脚本的方法
Dec 31 Javascript
vue-hook-form使用详解
Apr 07 Javascript
Vue header组件开发详解
Jan 26 Javascript
解决Layui数据表格中checkbox位置不居中的方法
Aug 15 Javascript
JS中forEach()、map()、every()、some()和filter()的用法
May 11 Javascript
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中$_FILES的使用以及注意事项
2013/07/05 PHP
php单例模式示例分享
2015/02/12 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
2015/08/21 PHP
PHP自动补全表单的两种方法
2017/03/06 PHP
php实现获取近几日、月时间示例
2019/07/06 PHP
javascript编程起步(第二课)
2007/01/10 Javascript
createElement动态创建HTML对象脚本代码
2008/11/24 Javascript
JS简单计算器实例
2015/01/20 Javascript
javascript中Function类型详解
2015/04/28 Javascript
js实现登录验证码
2016/12/22 Javascript
vue.js 左侧二级菜单显示与隐藏切换的实例代码
2017/05/23 Javascript
[js高手之路]图解javascript的原型(prototype)对象,原型链实例
2017/08/28 Javascript
微信小程序input框中加入小图标的实现方法
2018/06/19 Javascript
看看“疫苗查询”小程序有温度的代码
2018/07/31 Javascript
JavaScript格式化json和xml的方法示例
2019/01/22 Javascript
vue实现简单的登录弹出框
2020/10/26 Javascript
javascript代码实现简易计算器
2021/01/25 Javascript
Python和perl实现批量对目录下电子书文件重命名的代码分享
2014/11/21 Python
用Python遍历C盘dll文件的方法
2015/05/06 Python
Python中的localtime()方法使用详解
2015/05/22 Python
Python网络爬虫中的同步与异步示例详解
2018/02/03 Python
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
Python求两个圆的交点坐标或三个圆的交点坐标方法
2018/11/07 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
2019/04/12 Python
简单了解python代码优化小技巧
2019/07/08 Python
Django DRF APIView源码运行流程详解
2020/08/17 Python
Python pip install之SSL异常处理操作
2020/09/03 Python
python中常用的数据结构介绍
2021/01/12 Python
Zalando Lounge瑞士:时尚与生活方式购物俱乐部
2020/03/12 全球购物
工程概预算专业毕业生求职信
2013/10/04 职场文书
大学生学习生活的自我评价
2013/11/01 职场文书
医院护士的求职信
2014/01/03 职场文书
理发店策划方案
2014/06/05 职场文书
营销总经理岗位职责范本
2014/09/02 职场文书
校园环保广播稿(3篇)
2014/09/15 职场文书
神州牡丹园的导游词
2019/11/20 职场文书