基于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实现的完美渐变弹出层效果代码
Apr 02 Javascript
jQuery.clean使用方法及思路分析
Jan 07 Javascript
jQuery 回车事件enter使用示例
Feb 18 Javascript
jQuery统计指定子元素数量的方法
Mar 17 Javascript
jquery实现加载进度条提示效果
Nov 23 Javascript
浅析javaScript中的浅拷贝和深拷贝
Feb 15 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
Mar 09 Javascript
简单实现js轮播图效果
Jul 14 Javascript
bootstrap-Treeview实现级联勾选
Nov 23 Javascript
使用JavaScript实现node.js中的path.join方法
Aug 12 Javascript
VUE中使用HTTP库Axios方法详解
Feb 05 Javascript
微信小程序实现天气预报功能(附源码)
Dec 10 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
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
PHP操作MySQL事务实例
2014/11/05 PHP
PHP7常量数组用法分析
2016/09/26 PHP
php 读取文件夹下所有图片、文件的实例
2018/10/17 PHP
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
laytpl 精致巧妙的JavaScript模板引擎
2014/08/29 Javascript
javascript模拟post提交隐藏地址栏的参数
2014/09/03 Javascript
node.js实现BigPipe详解
2014/12/05 Javascript
jquery插件hiAlert实现网页对话框美化
2015/05/03 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
2016/07/01 Javascript
实例学习JavaScript读取和写入cookie
2018/01/29 Javascript
echarts统计x轴区间的数值实例代码详解
2019/07/07 Javascript
Vue搭建后台系统需要注意的问题
2019/11/08 Javascript
vue+swiper实现左右滑动的测试题功能
2020/10/30 Javascript
Python代理抓取并验证使用多线程实现
2013/05/03 Python
Python实现的数据结构与算法之双端队列详解
2015/04/22 Python
简单介绍Python中的try和finally和with方法
2015/05/05 Python
Python列表生成式与生成器操作示例
2018/08/01 Python
解决pycharm安装后代码区不能编辑的问题
2018/10/28 Python
python简单贪吃蛇开发
2019/01/28 Python
详解python的argpare和click模块小结
2019/03/31 Python
python3.6 tkinter实现屏保小程序
2019/07/30 Python
Python3实现zip分卷压缩过程解析
2019/10/09 Python
Python如何实现小程序 无限求和平均
2020/02/18 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
2020/06/05 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
德国柯吉澳趣味家居:Koziol
2017/08/24 全球购物
美味咖啡的顶级烘焙师:Cafe Britt
2018/03/15 全球购物
时尚、社区、科技:SEVENSTORE
2019/04/26 全球购物
拓展培训心得体会
2014/01/04 职场文书
车辆工程专业求职信
2014/06/14 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
商业企业管理专业求职信
2014/07/10 职场文书
党员学习正风肃纪思想汇报
2014/09/12 职场文书
Python数据分析入门之数据读取与存储
2021/05/13 Python
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android