单例模式:
//保证一个类仅有一个实例,并且提供一个访问它的全局访问点。
//如果实例不存在,则生成一个实例,如果实例存在,则返回这个实例
var singleTon = (function(){
var _instance = null;
function Foo(){
var privateProp = "私有属性";
this.publicProp = "实例属性";
this.publicMethod = "实例方法";
}
return {
getInstance:function(){
if(!_instance){
_instance = new Foo();
}
return _instance;
}
}
})();
console.log(singleTon.getInstance());//Foo
console.log(singleTon.getInstance()==singleTon.getInstance());//true
下面是单例模式的一个应用(只是为了加强理解,实际应用中一般不这样写)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
.popBox{
width: 400px;
height: 400px;
background: red;
}
</style>
</head>
<body>
<input type="button" value="弹出框" id="btn">
<script type="text/javascript">
function PopBox(){
this.box = document.createElement("div");
this.box.className = "popBox";
document.body.appendChild(this.box);
}
(function(){
let oBtn = document.getElementById("btn");
var _instance = null;
oBtn.onclick = function(){
if(!_instance){
_instance = new PopBox();
}
}
})()
</script>
</body>
</html>