基于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 相关文章推荐
客户端脚本中常常出现的一些问题和调试技巧
Jan 09 Javascript
javascript之querySelector和querySelectorAll使用说明
Oct 09 Javascript
jquery 插件学习(五)
Aug 06 Javascript
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
Jun 17 Javascript
解析使用JS 清空File控件的路径值
Jul 08 Javascript
一款jquery特效编写的大度宽屏焦点图切换特效的实例代码
Aug 05 Javascript
Vue.js基础知识汇总
Apr 27 Javascript
使用ionic播放轮询广告的实现方法(必看)
Apr 24 Javascript
AngularJS 验证码60秒倒计时功能的实现
Jun 05 Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
Dec 14 Javascript
解决layui checkbox 提交多个值的问题
Sep 02 Javascript
详解JavaScript自定义函数
Jul 29 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遍历目录viewDir函数
2009/12/15 PHP
WordPress中"无法将上传的文件移动至"错误的解决方法
2015/07/01 PHP
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
PHP数据库连接mysql与mysqli对比分析
2016/01/04 PHP
php使用ffmpeg获取视频信息并截图的实现方法
2016/05/03 PHP
PHP基于XMLWriter操作xml的方法分析
2017/07/17 PHP
javascript jQuery插件练习
2008/12/24 Javascript
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
再谈Jquery Ajax方法传递到action(补充)
2014/05/12 Javascript
JavaScript中用字面量创建对象介绍
2014/12/31 Javascript
avalonjs实现仿微博的图片拖动特效
2015/05/06 Javascript
jQuery实现带玻璃流光质感的手风琴特效
2015/11/20 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
2017/04/27 jQuery
vue-cli + sass 的正确打开方式图文详解
2017/10/27 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
node 使用 async 控制并发的方法
2018/05/07 Javascript
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
2018/08/30 Javascript
Vue中遍历数组的新方法实例详解
2019/07/21 Javascript
Python http接口自动化测试框架实现方法示例
2018/12/06 Python
Python minidom模块用法示例【DOM写入和解析XML】
2019/03/25 Python
jupyter notebook 的工作空间设置操作
2020/04/20 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
python利用platform模块获取系统信息
2020/10/09 Python
教你如何用python操作摄像头以及对视频流的处理
2020/10/12 Python
用python计算文件的MD5值
2020/12/23 Python
Farah官方网站:男士服装及配件
2019/11/01 全球购物
解释下面关于J2EE的名词
2013/11/15 面试题
银行会计职员个人的自我评价
2013/09/29 职场文书
体育专业学生自我评价范文
2014/01/17 职场文书
补充协议书范本
2014/04/23 职场文书
红领巾心向党演讲稿
2014/09/10 职场文书
父亲节寄语大全
2015/02/27 职场文书
2015年节能减排工作总结
2015/05/14 职场文书
2016年第104个国际护士节活动总结
2016/04/06 职场文书