基于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 相关文章推荐
Sample script that displays all of the users in a given SQL Server DB
Jun 16 Javascript
javascript中的undefined 与 null 的区别  补充篇
Mar 17 Javascript
浅析javascript中的DOM
Mar 01 Javascript
jQuery中extend函数详解
Jul 13 Javascript
JavaScript学习笔记之ES6数组方法
Mar 25 Javascript
详解jQuery选择器
Dec 21 Javascript
Canvas实现动态的雪花效果
Feb 13 Javascript
js获取一组日期中最近连续的天数
May 25 Javascript
微信小程序实现指定显示行数多余文字去掉用省略号代替
Jul 25 Javascript
JS执行控制之节流模式实例分析
Dec 21 Javascript
微信小程序组件传值图示过程详解
Jul 31 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
Aug 28 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版淘宝网查询商品接口代码示例
2014/06/17 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
2017/10/10 PHP
a标签的css样式四个状态
2021/03/09 HTML / CSS
通过javascript设置css属性的代码
2009/12/28 Javascript
浅析Prototype的模板类 Template
2011/12/07 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
浅谈angularJS中的事件
2016/07/12 Javascript
JS简单获取客户端IP地址的方法【调用搜狐接口】
2016/09/05 Javascript
Bootstrap风格的zTree右键菜单
2017/02/17 Javascript
Vue中添加过渡效果的方法
2017/03/16 Javascript
jquery实现全选、全不选以及单选功能
2017/03/23 jQuery
大白话讲解JavaScript的Promise
2017/04/06 Javascript
vue结合Echarts实现点击高亮效果的示例
2018/03/17 Javascript
单页面vue引入百度统计的使用方法示例详解
2018/10/13 Javascript
JavaScript 点击触发复制功能实例详解
2018/11/02 Javascript
layui table数据修改的回显方法
2019/09/04 Javascript
VUE单页面切换动画代码(全网最好的切换效果)
2019/10/31 Javascript
JS实现动态星空背景效果
2019/11/01 Javascript
微信小程序 scroll-view的使用案例代码详解
2020/06/11 Javascript
微信小程序实现发微博功能的示例代码
2020/06/24 Javascript
如何管理Vue中的缓存页面
2021/02/06 Vue.js
[03:34]2014DOTA2西雅图国际邀请赛 淘汰赛7月15日TOPPLAY
2014/07/15 DOTA
[18:16]sakonoko 2017年卡尔集锦
2018/02/06 DOTA
[42:20]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python创建只读属性对象的方法(ReadOnlyObject)
2013/02/10 Python
Python反射用法实例简析
2017/12/22 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
Python二叉搜索树与双向链表转换算法示例
2019/03/02 Python
TensorFlow——Checkpoint为模型添加检查点的实例
2020/01/21 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
2020/06/18 Python
详解Python遍历列表时删除元素的正确做法
2021/01/07 Python
大学生助学金感谢信
2015/01/21 职场文书
运动会广播稿300字
2015/08/19 职场文书
党员读书活动心得体会
2016/01/14 职场文书
2019旅游导游工作总结
2019/06/27 职场文书
Linux、ubuntu系统下查看显卡型号、显卡信息详解
2022/04/07 Servers