js实现单例
单例无外乎每次调用返回的都是同一个对象,可以利用闭包实现
function Singleton(){ this.data = "singleton"; } Singleton.getInstance = (function(){ var instance; return function(){ instance = instance ? instance:new Singleton; return instance; } })(); var sa = Singleton.getInstance(); var sb = Singleton.getInstance(); console.log(sa === sb); console.log(sa.data);
输出结果
这种方式比较简单,Singleton类暴露全局,直接使用Singleton.getInstance()即可。
还有种情况,假设不想暴露Singleton,可以
var SingletonA = (function(){ var instance = null; function Singleton(){ this.init(); } Singleton.prototype.init = function(){ this.data = "SingletonA"; } return function(){ if(instance == null){ instance = new Singleton(); } return instance; }; })(); var b = SingletonA(); var c = SingletonA(); console.log(b === c); console.log(b.data);
输出
还有一种
var SingletonF = function(){ if(SingletonF.instance){ console.log("不能new"); } this.name = "gggg"; }; SingletonF.getInstance = function(name){ if(SingletonF.instance == null){ SingletonF.instance = new SingletonF(); } return SingletonF.instance; } var s1 = SingletonF.getInstance("ccc"); var s2 = SingletonF.getInstance("def"); console.log(s1 === s2); console.log(s1.name);
写法基本上大同小异,只要保证instance唯一就行了
写博客能赚钱吗?如果不赚钱,那这个签名又有什么意义!所以大家多多给我发红包,多多祈祷,祈祷我成为万元户,然后普渡众生!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构