基于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 例外被抛出且未被接住原因介绍
Sep 04 Javascript
js 通用订单代码
Dec 23 Javascript
jquery通过load获取文件的内容并跳到锚点的方法
Jan 29 Javascript
jQuery实现Tab选项卡切换效果简单演示
Nov 23 Javascript
jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
Dec 12 Javascript
基于JavaScript实现选项卡效果
Jul 21 Javascript
浅谈JS函数节流防抖
Oct 18 Javascript
KOA+egg.js集成kafka消息队列的示例
Nov 09 Javascript
React如何实现浏览器打印部分内容详析
May 19 Javascript
jquery实现垂直无限轮播的方法分析
Jul 16 jQuery
多个vue子路由文件自动化合并的方法
Sep 03 Javascript
解决vue scoped html样式无效的问题
Oct 24 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提取中文首字母
2008/04/09 PHP
PHP之数组学习
2011/05/29 PHP
php快递单号查询接口使用示例
2014/05/05 PHP
ThinkPHP多语言支持与多模板支持概述
2014/08/22 PHP
php获取客户端IP及URL的方法示例
2017/02/03 PHP
PHP中单例模式与工厂模式详解
2017/02/17 PHP
PHP 二维array转换json的实例讲解
2018/08/21 PHP
javascript oop开发滑动(slide)菜单控件
2010/08/25 Javascript
让图片旋转任意角度及JQuery插件使用介绍
2013/03/20 Javascript
关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
2014/02/11 Javascript
Node.js安装教程和NPM包管理器使用详解
2014/08/16 Javascript
用js判断是否为360浏览器的实现代码
2015/01/15 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
2016/05/30 Javascript
vue proxyTable 接口跨域请求调试的示例
2017/09/12 Javascript
详解设置Webstorm 利用babel将ES6自动转码成ES5
2017/12/20 Javascript
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
mapboxgl区划标签避让不遮盖实现的代码详解
2020/07/01 Javascript
vue+iview分页组件的封装
2020/11/17 Vue.js
[16:01]夜魇凡尔赛茶话会 第二期01:你比划我猜
2021/03/11 DOTA
Python+Django在windows下的开发环境配置图解
2009/11/11 Python
详解详解Python中writelines()方法的使用
2015/05/25 Python
python 垃圾收集机制的实例详解
2017/08/20 Python
python验证码识别实例代码
2018/02/03 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
2019/06/24 Python
Python flask路由间传递变量实例详解
2020/06/03 Python
Agoda台湾官网:国内外订房2折起
2018/03/20 全球购物
一套SQL笔试题
2016/08/14 面试题
质检部岗位职责
2013/11/11 职场文书
实习心得体会
2014/01/02 职场文书
2014年社会实践活动总结范文
2014/04/29 职场文书
冬季施工防火方案
2014/05/17 职场文书
违纪检讨书范文
2015/01/27 职场文书
初中生物教学随笔
2015/08/15 职场文书
安全生产培训心得体会
2016/01/18 职场文书
Nginx工作模式及代理配置的使用细节
2022/03/21 Servers
SpringBoot全局异常处理方案分享
2022/05/25 Java/Android