基于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 相关文章推荐
Jquery中getJSON在asp.net中的使用说明
Mar 10 Javascript
jQuery $.get 的妙用 访问本地文本文件
Jul 12 Javascript
JavaScript对象和字串之间的转换实例探讨
Apr 21 Javascript
JS动态添加与删除select中的Option对象(示例代码)
Dec 20 Javascript
JS替换字符串中字符即替换全部而不是第一个
Jun 04 Javascript
javascript中html字符串转化为jquery dom对象的方法
Aug 27 Javascript
浅谈javascript的Touch事件
Sep 27 Javascript
基于javascript实现全国省市二级联动下拉选择菜单
Jan 28 Javascript
微信小程序 常用工具类详解及实例
Feb 15 Javascript
EasyUI中的dataGrid的行内编辑
Jun 22 Javascript
js实现把时间戳转换为yyyy-MM-dd hh:mm 格式(es6语法)
Dec 28 Javascript
详解React服务端渲染从入门到精通
Mar 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动态生成JavaScript代码
2009/03/09 PHP
php 图片上添加透明度渐变的效果
2009/06/29 PHP
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
2011/04/23 PHP
php将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
2013/10/16 PHP
php获取POST数据的三种方法实例详解
2016/12/20 PHP
基于Jquery制作的幻灯片图集效果打包下载
2011/02/12 Javascript
Javascript中正则表达式的全局匹配模式分析
2011/04/26 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
一个简单的实现下拉框多选的插件可移植性比较好
2014/05/05 Javascript
JavaScript返回网页中超链接数量的方法
2015/04/03 Javascript
js实现图片无缝滚动
2015/12/23 Javascript
Javascript的表单验证长度
2016/03/16 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
2016/09/06 Javascript
Vue实现点击后文字变色切换方法
2018/02/11 Javascript
浅谈Angular6的服务和依赖注入
2018/06/27 Javascript
JS根据Unix时间戳显示发布时间是多久前【项目实测】
2019/07/10 Javascript
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
Python Web框架Flask信号机制(signals)介绍
2015/01/01 Python
Python赋值语句后逗号的作用分析
2015/06/08 Python
深入理解NumPy简明教程---数组1
2016/12/17 Python
Python和Go语言的区别总结
2019/02/20 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
2020/03/11 Python
pycharm解决关闭flask后依旧可以访问服务的问题
2020/04/03 Python
创联软件面试题笔试题
2012/10/07 面试题
教育系毕业生中文求职信范文
2013/10/06 职场文书
客户经理岗位职责
2013/12/08 职场文书
医务工作者先进事迹材料
2014/01/26 职场文书
小学三年级数学教学反思
2014/01/31 职场文书
公司领导九九重阳节发言稿2014
2014/09/25 职场文书
2014年幼儿园保育工作总结
2014/12/02 职场文书
行政前台岗位职责
2015/04/16 职场文书
第一军规观后感
2015/06/12 职场文书
运动会主持词大全
2015/07/02 职场文书
python源码剖析之PyObject详解
2021/05/18 Python