浅学JS单例模式

1,938 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第10天,点击查看活动详情

学习于《Javascript设计模式与开发实践》

无代码,纯纯的理论~

  • 设计模式定义:在面向对象软件设计过程中针对特定问题的简洁而优雅的处理方式。

我对于设计模式的理解:有可能我们在日常开发中已经用到了某写设计模式,而我们却不知道。设计模式的出现就是给某些好的代码逻辑一个名字,这样也会有系统的让更多的人认识并学习。

所谓设计模式的实现一直都是遵循一条准则:找出程序中变化的地方,将其封装起来。

Javascript 单例模式

定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

不过传统的单例模式的实现在Javascript并不适用。但是其实我们在日常Javascript中开发会有一个误区,就是我们会常常把全局变量当成是单例模式来使用。例如var a = {};,因为它的确也是独一无二的,如果将其声明在全局作用域下,我们也就可以在代码的任何地方使用这个变量了。这也就符合了单例模式的两个特点。

但是全局变量如果在中大型项目中不加以管控,就会出现命名空间被污染,也就是变量名称被覆盖。所以我们要尽量减少使用全局变量,降低命名污染。

  • 降低全局变量命名污染的方法: 1、使用字面量对象,将一个模块的变量放在一个对象中;

2、可以使用闭包封装私有变量,只暴露出一些接口跟外界通信;

惰性单例

  • 介绍:在需要的时候才会创建的实例对象。惰性单例是单例模式的重点,这种技术其实在我们的日常开发中也是非常常见的。

介绍一个例子,例如QQ的登陆界面。当点击登陆时就会创建一个弹出层。这时如果我们将其设置为显示或隐藏,那么就会出现空DOM导致节点浪费。那又会想到在需要点击时再去创建节点,可是这样又会出现频繁的创建和删除节点,显然这也是不必要的。可能这时会有一部分人想到了可以通过一个变量判断是否进行创建过弹窗,其实这也就是一个简单的惰性单例。需要的时候再去创建。

但是,这样也是有缺点的。如果,有相似的功能,就要一摸一样的再来一遍。这时,就可以将不变的部分隔离开。其实,到这也就算是看明白了。其实,在我看来组件的封装就是惰性单例模式。开发一直用,竟不知道还有个学名~

所以,我又可以装逼了~ 哈哈哈哈