本文详解JavaScript中的单例模式,阐述其确保类仅有一个实例的核心概念。分析模块通信、对象唯一性及属性保护等作用,并重点提醒this关键字使用、闭包内存泄漏及new实例化成本等注意事项。附带完整HTML/JS代码示例,帮助开发者掌握单例模式的实际应用。
本文通过具体实例介绍JavaScript中的单例模式,供读者参考学习。
一、单例模式概念
单例模式的核心在于确保一个类仅存在一个实例。其实现逻辑通常是:先检查实例是否已存在,若存在则直接返回该实例;若不存在,则创建新实例并返回。这种方式保证了类的全局唯一性。在JavaScript中,单例常作为命名空间提供者,从全局命名空间中提供唯一的访问入口。
二、单例模式的作用和注意事项
该模式的主要作用包括:
1、实现模块间通信
2、确保系统中某个类的对象只能存在一个
3、封装并保护内部的属性和方法
使用时需注意以下事项:
1、注意this的使用
2、闭包容易导致内存泄露,对于不再需要的引用应及时清除
3、注意new的成本。(继承)
三、单例模式代码和实战总结
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>单例模式</title>
</head>
<body>
<!--<script>
var Singleton = (function(){
var instantiated;
function init(){
/*这里定义单例代码*/
return{
publicMethod:function(){
console.log("hello world");
},
publicProperty:"test"
};
}
return{
getInstance:function(){
if(!instantiated){
instantiated = init();
}
return instantiated;
}
}
})();
Singleton.getInstance().publicMethod();
</script>-->
<script>
/*1.独立的对象 建2个一个xiaowang一个xiaoli
2.让xiaoli跟xiaowang通过门铃进行通信
3.先看一下xiaowang家有没有门 如果油门直接通过门铃通讯didi如果没有门先建门
4.两个单例之间看是通讯*/
var xiaowang = (function(argument){
var men;
var xiaowangjia = function(msg){
this.menling = msg;
}
var info = {
sendMessage:function(msg){
if(!men){
men = new xiaowangjia(msg);
}
return men;
},
abc:function(){
return 123;
}
};
return info;
})();
var xiaoli = {
callXiaowang:function(msg){
var _xw = xiaowang.sendMessage(msg);
alert(_xw.menling);
console.log(_xw.menling);
_xw = null;//等待垃圾回收
var abc = xiaowang.abc();
console.log(abc);
}
}
xiaoli.callXiaowang("didi");
</script>
</body>
</html>
可使用在线HTML/CSS/JavaScript代码运行工具 http://tools.jb51.net/code/HtmlJsRun 测试运行效果如下:


更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。