
九、js闭包实现单例模式、es6单例模式(2021/4/25)
发布日期:2021-05-07 05:41:01
浏览次数:18
分类:精选文章
本文共 2108 字,大约阅读时间需要 7 分钟。
单例模式与 ES5/ES6 实现
什么是单例模式?
在软件开发中,单例模式是一种软件设计模式,确保一个类只存在一个实例。这种模式常用于需要对资源进行控制管理的场景,例如全局缓存或弹窗组件。
单例模式的实现方式
单例模式的核心思想是确保某个类只能有一个实例。常见的实现方式包括:
早期初始化:在页面加载时,立即创建并初始化弹窗组件,并设置为隐藏状态。这种方法可以确保弹窗在点击按钮时直接显示,但会导致资源占用。
按需创建:在按钮点击时,动态创建弹窗组件。这种方法避免了资源浪费,但每次点击都会重新创建新的弹窗实例,增加了内存负担。
单例模式优化:通过闭包机制,在内存中维护一个标记,确保只创建一个弹窗实例。这种方法既节省了资源,又保证了弹窗的唯一性。
ES5 与 ES6 的单例模式实现
ES5 实现:
var createLoginLayer = (function() { var div = document.createElement('div'); div.innerHTML = '我是登录的弹窗'; div.style.display = 'none'; document.body.appendChild(div); return div;})();document.getElementById('button').onclick = function() { loginLayer.style.display = 'block';};
ES6 实现:
class LoginLayer { constructor() { this.div = document.createElement('div'); this.div.innerHTML = '我是登录的弹窗'; this.div.style.display = 'none'; document.body.appendChild(this.div); } show() { this.div.style.display = 'block'; }}const loginInstance = new LoginLayer();loginInstance.show = () => { loginInstance.div.style.display = 'block';};document.getElementById('button').addEventListener('click', () => { loginInstance.show();});
单例模式优化
在 ES6 中,可以借助 static
关键字实现单例模式。通过在类级别定义一个静态属性 instance
,确保只创建一个实例。
代码示例:
class LyEdu { static getInstance(name, creator, products) { if (!LyEdu.instance) { LyEdu.instance = new LyEdu(name, creator, products); } return LyEdu.instance; } constructor(name, creator, products) { this.name = name; this.creator = creator; this.products = products; }}// 创建实例const lyCom = LyEdu.getInstance('零元教育', '裴老师', ['js', 'css', 'html']);// 创建第二个实例const lyCom2 = LyEdu.getInstance('零元教育2', '裴老师2', ['js2', 'css', 'html']);console.log(lyCom === lyCom2); // true
静态方法与单例模式
静态方法可以在类级别定义,避免实例调用。通过在静态方法中管理单例实例,可以实现更高效的资源管理。
代码示例:
class Foo { static classMethod() { return 'hello'; }}const foo = new Foo();console.log(Foo.classMethod()); // 输出 'hello'
结论
单例模式通过确保类只存在一个实例,优化了资源管理,避免了频繁的对象创建和销毁带来的性能消耗。在 ES5 和 ES6 中,可以通过不同的方式实现单例模式。借助静态属性和方法,可以进一步优化代码结构,提升开发效率。
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年03月27日 17时19分48秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
上周热点回顾(11.4-11.10)
2019-03-06
[网站公告]11月26日00:00-04:00阿里云RDS升级
2019-03-06
[网站公告]又拍云API故障造成图片无法上传(已恢复)
2019-03-06
上周热点回顾(12.16-12.22)
2019-03-06
云计算之路-阿里云上:对“黑色30秒”问题的猜想
2019-03-06
云计算之路-阿里云上:“黑色30秒”走了,“黑色1秒”来了,真相也许大白了
2019-03-06
云计算之路-阿里云上:奇怪的CPU 100%问题
2019-03-06
云计算之路-阿里云上:2014年6月12日12点IIS请求到达量突降
2019-03-06
上周热点回顾(6.9-6.15)
2019-03-06
上周热点回顾(6.16-6.22)
2019-03-06
上周热点回顾(6.23-6.29)
2019-03-06
上周热点回顾(10.20-10.26)
2019-03-06
上周热点回顾(2.16-2.22)
2019-03-06
上周热点回顾(3.2-3.8)
2019-03-06
[网站公告]3月10日23:00-4:00阿里云SLB升级,会有4-8次连接闪断
2019-03-06
.NET跨平台之旅:借助ASP.NET 5 Beta5的新特性显示CLR与操作系统信息
2019-03-06
上周热点回顾(7.27-8.2)
2019-03-06
上周热点回顾(9.28-10.4)
2019-03-06
上周热点回顾(3.28-4.3)
2019-03-06
上周热点回顾(5.2-5.8)
2019-03-06