什么是单例模式

单: 单一, 一个

例: 实例

所谓的单例, 就是指一个类只有一个实例, 不管你 new 多少次, 都是这一个实例

具体的实现思路就是:

  • 先判断实例是否存在
  • 如果存在则直接将实例返回
  • 如果不存在, 就创建了再返回

先看一个普通的实例化

function Person() {this.name = '猫'
}const p1 = new Person()
const p2 = new Person()console.log(p1, p2);
console.log(p1 == p2);

单例模式就是帮助我们把这里的 false变成 true

回过头看上面的思路, 有两个重要的点:

  • 怎么判断实例是否存在 ?
  • 将实例返回意味着什么 ?

对于上面两个问题:

  • 我们是不是可以提前设置一个用于实例化的变量, 但是不赋值
  • 注意第二个问题中的 返回, 两个字, 意味着我们需要在函数内部完成

单例的简单实现

function Person() {this.name = '猫'
}// 单例模式的核心代码
// 标识flag
var instance
// 单例模式的核心代码
function singleTon() {if (!instance) instance = new Person()return instance
}const p1 = singleTon()
const p2 = singleTon()console.log(p1, p2);
console.log(p1 == p2);

原理是什么:

  • 第一次执行 singleTon, 因为标识 instance 是undefined, 取反以后就是 true, 此时就会创建Person的一个实例, 然后将其返回, 当我们第二次调用 singleTon, 因为 instance 是全局变量, 会被一直保存, 所以此时instance 的值为刚刚的实例对象, 此时再取反就是false, 会将instance 直接返回除去, 也就实现的只有一个实例

因为全局变量带来的某些负面影响,我们应当尽可能少的使用全局变量, 如果我们将 instance 声明成局部变量, 函数执行完后局部变量又会被释放, 怎么办 ?

这时候闭包站出来了, 闭包说: 我可以帮助你们保存函数的上下文环境, 让局部变量一直存在

既然如此, 那咱们就写写看呗

var singleTon = (function () {// 将类移到自执行函数内部, 是为了不对外暴露内部实现function Person() {this.name = '猫'}let instancereturn function () {if (!instance) instance = new Person()return instance}
})()const p1 = singleTon()
const p2 = singleTon()console.log(p1, p2);
console.log(p1 === p2);

2. 单例模式有什么作用

单例模式主要的用途就是 网页弹出框 的开发

比如说, 我们需要开发一个登录框和一个注册框, 两者的整体布局大致相同, 有如下思路

  • 分别开发两个弹出框
  • 开发一个弹出框, 实例化出登录框和注册框, 各自的细节各自再实现

javascript实现单例模式相关推荐

  1. JavaScript设计模式----单例模式

    声明:这个系列为阅读<JavaScript设计模式与开发实践> --曾探@著一书的读书笔记 1.单例模式的特点和定义 保证一个类仅有一个实例,并且提供一个访问它的全局访问点. 2.传统面向 ...

  2. javascript设计模式--单例模式

    什么是单例模式 单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象.在JavaScript里,单例作为一个 ...

  3. JavaScript设计模式——单例模式的理解与应用

    JavaScript设计模式--对单例模式的一些见解 JavaScript设计模式主要分类: ①创建型设计模式,例如单例模式.工厂模式 ②结构型设计模式,例如装饰者模式.适配器模式 ③行为型设计模式, ...

  4. JavaScript设计模式 单例模式

    单例模式的定义是:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 先看一下,在Js中使用传统面向对象的单例模式. 面向对象的单例模式,是通过new关键字来实例化我们想要的对象,并将其赋值给in ...

  5. javascript设计模式-单例模式(singleton pattern)

    为什么80%的码农都做不了架构师?>>>    最简单的单例模式 var mySingleton = {property1: "something",proper ...

  6. JavaScript设计模式——单例模式

    单例模式 单例模式顾名思义就是只生成一个实例对象的一种模式.无论调用多少次都只返回相同的实例. 当我们单击登录按钮的时候,页面中会出现一个登录浮窗,而这个登录浮窗是唯一的,无论单击多少次登录按钮,这个 ...

  7. Javascript设计模式

    设计原则(SOLID) 单一职责模式(S) 一个程序只做好一件事 如果功能过于复杂就拆分开,每个部分保持独立 里式替换原则(L) 子类能覆盖父类 父类能出现的地方子类就能出现 JS中使用较少(弱类型& ...

  8. Javascript学习之函数(function)

    http://www.cnblogs.com/royalroads/p/4418587.html 在JS中,Function(函数)类型实际上是对象;每个函数都是Function类型的实例,而且都与其 ...

  9. 《JavaScript设计模式》读后感 觉很复杂

    接触前端两三个月的时候,那时候只是听说设计模式很重要,然后我就去读了一本设计模式的书,读了一部分,也不知道这些设计模式到底设计出来干嘛的,然后就没再看了.后来就自己做一些小项目也觉着好像不需要用到设计 ...

  10. 《JavaScript设计模式》读后感

    接触前端两三个月的时候,那时候只是听说设计模式很重要,然后我就去读了一本设计模式的书,读了一部分,也不知道这些设计模式到底设计出来干嘛的,然后就没再看了.后来就自己做一些小项目也觉着好像不需要用到设计 ...

最新文章

  1. java触发full gc的几种情况概述
  2. Java内存泄露的理解与解决
  3. HDU - 7073 Integers Have Friends 2.0 随机化 + 质因子
  4. Apache Kylin 部署之不完全指南
  5. 钉钉用户数破5亿 低代码应用数8个月增长86万
  6. 出版新书《从毕业生到程序员 使用C#开发商业软件》
  7. 计算机的桌面图标设置在哪里,电脑小图标怎么设置在哪里
  8. 仿淘宝中心轮播图 JS[代码+详细讲解+效果图]
  9. 微信小程序UI组件 开发框架 实用库 经典demo
  10. 建筑识图与构造【2】
  11. dataV实现扇形图轮播
  12. TI毫米波雷达开发中软件版本的说明
  13. 网络层:控制平面总结
  14. Linux学习(十四)——scp远程拷贝
  15. D - Silver Cow Party J - Invitation Cards 最短路
  16. 高新技术企业申请后多久会出结果呢?
  17. Ubuntu22.04更换国内镜像源(阿里、网易163、清华、中科大)
  18. 奥巴马胜利演说英文及中文
  19. Vue项目iconfont新增svg图标
  20. [FAQ09065][Others]MTK发布的Android software Tools 工具包中所有工具的说明

热门文章

  1. 网页360浏览器极速模式能打开,兼容模式打不开
  2. Apache运行模式MPM详解
  3. 塔夫斯大学计算机教授,塔夫茨大学工程学院虚拟教室取得成功!
  4. 论文常用图表三:盒图 Boxplot【MATLAB】
  5. AutoSar之CAN网络管理详解
  6. 论文翻译:(BMVC 2022)You Only Need 90K Parameters to Adapt Light:a Light Weight Transformer
  7. python背景颜色代码大全_Python实现转换图片背景颜色代码
  8. 学习 Bootstrap 5 之 Sizing 和 Spacing
  9. iPad忘记密码时恢复出厂设置
  10. 内卷机器下的自我救赎