7、闭包实现单例
闭包
1、单例属性
function Person(){
var name="ace";
var age=18;
return function(){
var birthday=2002;
console.log(`name is:${name},age is: ${age++},birthday is: ${birthday++}`);
}
}
var p1=new Person();//由于这个类返回的是一个方法,所以实例化出来的p1也只是一个方法,不管p1调用多少次,age是不会被重置的。
p1();//age:18,birthday:2002
p1();//age:19,birthday:2002
p1();//age:20,birthday:2002
如果重新实例化的话,age是会被重置的
2、单例对象
function Person(){
this.age=18;
}
const singleton=(function (){
var instance=null;//单例
return function(){
if(!instance)
instance=new Person();
return instance;
}
})();
//per1和per2都是同一个对象,因为singleton方法实例后会直接返回一个person对象,而这个方法内部又是闭包实现单例instance,主要是因为singleton的匿名方法会自调用,所以,匿名方法创建了就调用了,
//所以常量singleton里装的就是一个单纯的Person对象的实例。
var per1=new singleton();//加括号表示会调用singleton方法。
var per2=new singleton();
console.log(per1);//结果为Person的实例
console.log(per2);//结果为Person的实例
console.log(per1==per2);//结果为true,因为他们是同一个实例
per1.age++;
console.log(per2.age);//结果为19,因为per1和per2是同一个实例
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构