JavaScript使用闭包实现单例模式
JavaScript模式 实现 单例 闭包 使用
2023-09-27 14:26:14 时间
闭包是JS的一种特性,其中一点就是:可以将外部函数的变量保存在内存中,利用这一特性,我们可以用来实现类的单例模式。
首先需要了解何为单例模式:
意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
主要解决:一个全局使用的类频繁地创建与销毁。
何时使用:当您想控制实例数目,节省系统资源的时候。
如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。
了解完单例模式之后,我们不难写出以下代码:
var HeadClass = function () { }; var Head = (function () { // 匿名自执行函数 var instance; // 声明一个instance对象 return function () { if (instance) { // 如果已存在 则返回instance return instance; } instance = new HeadClass() // 如果不存在 则new一个HeadClass对象 return instance; } })(); var a = new Head(); var b = new Head(); console.log(a===b) // true
我们只需要调用new Head()即可构造一个单例模式对象,但同时也可以调用new HeadClass()构造新的对象,那么我们如何加以限制,让其只能调用new Head()来构造对象呢?
其实我们只需要把HeadClass声明放入匿名自执行函数Head内即可:
var Head = (function () { var HeadClass = function () { }; // 声明HeadClass对象,无法在外部直接调用 var instance; // 声明一个instance对象 return function () { if (instance) { // 如果已存在 则返回instance return instance; } instance = new HeadClass() // 如果不存在 则new一个 return instance; } })(); var a = Head(); var b = new Head(); console.log(a===b) // true var a = HeadClass(); // 报错,HeadClass is not defined
相关文章
- [ JavaScript ] 基础知识
- 详解JavaScript在物联网中的应用
- 【JavaScript】循环语句
- JavaScript运算符规则与隐式类型转换详解
- Javascript中的this,call,apply,bind函数
- 8个 CSS & JavaScript 实现的照片库(相册)特效
- JavaScript--动态添加元素
- 21个值得收藏的Javascript技巧
- Javascript 严格模式详解
- JavaScript(JS) ESlint报错Error: Must use import to load ES Module解决方法
- JavaScript(JS) string.toLocaleUpperCase( )
- 稍微谈一下 javascript 开发中的 MVC 模式
- Javascript设计模式之装饰者模式详解篇
- JAVASCRIPT 对象的创建和对6种继承模式的理解和遐想
- JavaScript中的模块化之AMD和CMD
- Python:模拟登录、点击和执行 JavaScript 语句案例
- javascript文件加载模式与加载方法
- JavaScript中的单体模式四种实现方式
- 个人常用JavaScript及React常用优化总结
- 《JavaScript 模式》知识点小抄本(上)