基于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 index()方法 获取相应元素索引值
Oct 12 Javascript
Javascript模块化编程(三)require.js的用法及功能介绍
Jan 17 Javascript
jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别
Dec 02 Javascript
jquery实现页面关键词高亮显示的方法
Mar 12 Javascript
jquery拖动层效果插件用法实例分析(附demo源码)
Apr 28 Javascript
Json解析的方法小结
Jun 22 Javascript
12条写出高质量JS代码的方法
Jan 07 Javascript
axios拦截设置和错误处理方法
Mar 05 Javascript
vue移动UI框架滑动加载数据的方法
Mar 12 Javascript
vue拦截器实现统一token,并兼容IE9验证功能
Apr 26 Javascript
详解javascript函数写法大全
Mar 25 Javascript
vue登录注册实例详解
Sep 14 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
《魔兽世界》惊魂幻象将获得调整
2020/03/08 其他游戏
汉字转化为拼音(php版)
2006/10/09 PHP
Smarty+QUICKFORM小小演示
2007/02/25 PHP
10条PHP编程习惯助你找工作
2008/09/29 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
2013/08/01 PHP
PHP+Ajax实时自动检测是否联网的方法
2015/07/01 PHP
django中的ajax组件教程详解
2018/10/18 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
safari,opera嵌入iframe页面cookie读取问题解决方法
2010/06/23 Javascript
基于Jquery的简单图片切换效果
2011/01/06 Javascript
点击按钮或链接不跳转只刷新页面的脚本整理
2013/10/22 Javascript
jQuery拖拽插件gridster使用指南
2015/04/21 Javascript
jQuery验证插件validation使用指南
2015/04/21 Javascript
JS+CSS实现大气清新的滑动菜单效果代码
2015/10/22 Javascript
jQuery实用技巧必备(上)
2015/11/02 Javascript
轻松实现JavaScript图片切换
2016/01/12 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
2016/05/26 Javascript
微信小程序 选项卡的简单实例
2017/05/24 Javascript
JS数组去重的6种方法完整实例
2018/12/08 Javascript
React组件对子组件children进行加强的方法
2019/06/23 Javascript
[43:32]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
Python基于smtplib实现异步发送邮件服务
2015/05/28 Python
Python排序算法实例代码
2017/08/10 Python
Python实现针对json中某个关键字段进行排序操作示例
2018/12/25 Python
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
什么是Python变量作用域
2020/06/03 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
使用jquery实现HTML5响应式导航菜单教程
2014/04/02 HTML / CSS
html5 canvas移动浏览器上实现图片压缩上传
2016/03/11 HTML / CSS
Skyscanner新西兰:全球领先的旅游搜索网站
2019/08/26 全球购物
Liu Jo西班牙官网:意大利服装品牌
2019/09/11 全球购物
料理师求职信
2014/01/30 职场文书
优秀学生干部推荐材料
2014/02/03 职场文书
临时工聘用合同协议书
2014/10/29 职场文书
计划生育个人总结
2015/03/02 职场文书
2016元旦晚会主持人开场白和结束语
2015/12/03 职场文书