基于JavaScript实现单例模式


Posted in Javascript onOctober 30, 2019

首先,了解一下什么是单例模式,这里我直接把菜鸟教程中的定义给copy过来:

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

注意:

1、单例类只能有一个实例。

2、单例类必须自己创建自己的唯一实例。

3、单例类必须给所有其他对象提供这一实例。

用一句话来总结就是:在单例模式中,一个类仅有一个实例,并提供一个访问它的全局访问点。这无非是用一个变量来标志当前是否已经为某个类创建过对象,如果是,则在下一次获取该类的实例时,直接返回之前创建的对象,在JavaScript我们很自然而然就会想到用闭包来解决这个问题。

比如说需要生成一个页面登录框,因为有且只可能有一个登录框,那么你就可以用单例的思想去实现他,代码如下:

let createLoginWindow = function(title) {
  this.title= title;
  this.init();
}

createLoginWindow.prototype.init = function() {
  // some code
  
}
let proxySingleton = (function() {
  var instance;
  return function(title) {
    if (!instance) {
      instance = new createLoginWindow(title);
    }
    return instance;
  }
})();
let windowA = new proxySingleton('login1');
let windowB = new proxySingleton('login2');

console.log(windowA === windowB); // true

可以看到,上述代码中createLoginWindow负责构造对象,然后通过代理proxySingleton来判断是构造新的对象还是返回已有对象。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript 陷阱 window全局对象
Nov 26 Javascript
jquery 实现两Select 标签项互调示例代码
Sep 25 Javascript
js 通过cookie实现刷新不变化树形菜单
Oct 30 Javascript
javascript异步编程代码书写规范Promise学习笔记
Feb 11 Javascript
jquery解析XML及获取XML节点名称的实现代码
May 18 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
Jul 15 Javascript
详解vue slot插槽的使用方法
Jun 13 Javascript
简单理解Vue中的nextTick方法
Jan 30 Javascript
在AngularJs中设置请求头信息(headers)的方法及不同方法的比较
Sep 04 Javascript
详解使用element-ui table组件的筛选功能的一个小坑
Nov 02 Javascript
bootstrap中的导航条实例代码详解
May 20 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
Apr 09 Javascript
vue解决使用$http获取数据时报错的问题
Oct 30 #Javascript
茶余饭后聊聊Vue3.0响应式数据那些事儿
Oct 30 #Javascript
vue请求服务器数据后绑定不上的解决方法
Oct 30 #Javascript
vue中的mescroll搜索运用及各种填坑处理
Oct 30 #Javascript
vue解决花括号数据绑定不成功的问题
Oct 30 #Javascript
vue中使用rem布局代码详解
Oct 30 #Javascript
vue进入页面时不在顶部,检测滚动返回顶部按钮问题及解决方法
Oct 30 #Javascript
You might like
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
2015/09/23 PHP
简单谈谈php浮点数精确运算
2016/03/10 PHP
PHP小白必须要知道的php基础知识(超实用)
2017/10/10 PHP
tp5框架的增删改查操作示例
2019/10/31 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
最新的10款jQuery内容滑块插件分享
2011/09/18 Javascript
浅析JQuery获取和设置Select选项的常用方法总结
2013/07/04 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
javascript实现动态侧边栏代码
2014/02/19 Javascript
鼠标移到图片上变大显示而不是放大镜效果
2014/06/15 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
JavaScript:ES2019 的新特性(译)
2019/08/08 Javascript
layui下拉框获取下拉值(select)的例子
2019/09/10 Javascript
[01:05:59]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
windows下ipython的安装与使用详解
2016/10/20 Python
Python实现破解12306图片验证码的方法分析
2017/12/29 Python
Python面向对象程序设计构造函数和析构函数用法分析
2019/04/12 Python
使用matlab或python将txt文件转为excel表格
2019/11/01 Python
详解在python操作数据库中游标的使用方法
2019/11/12 Python
浅谈django channels 路由误导
2020/05/28 Python
python给视频添加背景音乐并改变音量的具体方法
2020/07/19 Python
10行Python代码实现Web自动化管控的示例代码
2020/08/14 Python
Python析构函数__del__定义原理解析
2020/11/20 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
2021/01/07 Python
阿波罗盒子:Apollo Box
2017/08/14 全球购物
Expedia印度:您的一站式在线旅游网站
2017/08/24 全球购物
浅谈react路由传参的几种方式
2021/03/23 Javascript
计划生育个人总结
2015/03/02 职场文书
借款民事起诉状范文
2015/05/19 职场文书
Django实现聊天机器人
2021/05/31 Python
Java异常处理try catch的基本用法
2021/12/06 Java/Android
实现AJAX异步调用和局部刷新的基本步骤
2022/03/17 Javascript