单例模式定义
保证一个类只有一个实例,并且提供一个访问它的全局访问点。
通过类创建出来的对象只有一个
- 单例模式
var Single = (function () {
var instance = null;
return function (name) {
if(instance !== null){
return instance;
}
this.name = name;
instance = this;
}
})();
- 将构造函数转化为单例模式
var getSingle = function(func){
var result;
return function(){
if(!result){
result = func.apply(this,arguments);
}
return result;
}
}
- 应用
<button id="btn">login</button>
<script>
var oBtn = document.getElementById('btn');
var CreateAlert = function (text) {
var oDiv = document.createElement('div');
oDiv.style.display = 'none';
oDiv.innerText = 'text';
document.body.appendChild(oDiv);
return oDiv;
}
// var SingleAlert = (function () {
// var oDiv = null;
// return function(text){
// if(oDiv !== null){
// return oDiv;
// }
// oDiv = document.createElement('div');
// oDiv.style.display = 'none';
// oDiv.innerText = text;
// document.body.appendChild(oDiv);
// return oDiv;
// }
// })();
var getSingle = function(func){
var result;
return function(){
if(!result){
result = func.apply(this,arguments);
}
return result;
// if(result != null){
// return result;
// }
// //参数可能有多个
// result = func.apply(this,arguments);
// return result;
}
}
var SingleAlert = getSingle(CreateAlert);
// 每点击一次就创建一个新的对象 id可以直接写id名选中
btn.onclick = function () {
var oDiv = SingleAlert('alert');
oDiv.style.display = 'block';
}