基于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 相关文章推荐
Ruffy javascript 学习笔记
Nov 30 Javascript
Javascript倒计时代码
Aug 12 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
Aug 01 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
Mar 02 Javascript
jQuery使用toggleClass方法动态添加删除Class样式的方法
Mar 26 Javascript
javascript实现数据双向绑定的三种方式小结
Mar 09 Javascript
Angular2开发——组件规划篇
Mar 28 Javascript
vue的Virtual Dom实现snabbdom解密
May 03 Javascript
js装饰设计模式学习心得
Feb 17 Javascript
JavaScript实现图片放大镜效果
Jun 27 Javascript
vue-router两种模式区别及使用注意事项详解
Aug 01 Javascript
JavaScript流程控制(分支)
Dec 06 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
自己在做项目过程中学到的PHP知识收集
2012/08/20 PHP
浅析php中常量,变量的作用域和生存周期
2013/08/10 PHP
PHP获取当前url的具体方法全面解析
2013/11/26 PHP
destoon网站转移服务器后搜索汉字出现乱码的解决方法
2014/06/21 PHP
php之curl实现http与https请求的方法
2014/10/21 PHP
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
载入进度条 效果
2006/07/08 Javascript
jQuery EasyUI API 中文文档 - Draggable 可拖拽
2011/09/29 Javascript
js中parseFloat(参数1,参数2)定义和用法及注意事项
2013/01/27 Javascript
jQuery中height()方法用法实例
2014/12/24 Javascript
JavaScript中的对象的extensible属性介绍
2014/12/30 Javascript
日常收藏的jquery技巧
2015/12/02 Javascript
js实现五星评价功能
2017/03/08 Javascript
jQuery使用each遍历循环的方法
2018/09/19 jQuery
Layui tree 下拉菜单树的实例代码
2019/09/21 Javascript
Js参数RSA加密传输之jsencrypt.js的使用
2020/02/07 Javascript
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
pycharm+django创建一个搜索网页实例代码
2018/01/24 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
2019/06/17 Python
python 实现多线程下载视频的代码
2019/11/15 Python
Python timer定时器两种常用方法解析
2020/01/20 Python
python 安装移动复制第三方库操作
2020/07/13 Python
python 用Matplotlib作图中有多个Y轴
2020/11/28 Python
暇步士官网:Hush Puppies
2016/09/22 全球购物
伦敦哈德森鞋:Hudson Shoes
2018/02/06 全球购物
方正Java笔试题
2014/07/03 面试题
土木工程实习生自我鉴定
2013/09/19 职场文书
好家长事迹材料
2014/01/23 职场文书
升学宴主持词
2014/04/02 职场文书
常务副总经理岗位职责
2014/04/12 职场文书
协议书格式
2014/04/23 职场文书
机械设计及其自动化专业求职信
2014/06/09 职场文书
2016年高校自主招生自荐信范文
2015/03/24 职场文书
观看建国大业观后感
2015/06/01 职场文书
详解Mysql 函数调用优化
2021/04/07 MySQL