单例模式只会创建一个实例,且仅有一个实例,并提供一个访问它的全局访问点
理解单例模式
var Singleton=function(name){
this.name=name;
}
Singleton.prototype.getName=function(){
console.log(this.name);
}
Singleton.getInstance=(function(){
var instance=null;
return function(name){
if(!instance){
instance=new Singleton(name);
}
return instance;
}
})()
var a = Singleton.getInstance("aa");
var b = Singleton.getInstance("bbb");
console.log(a===b); //true
代理单例
var CreateDiv=function(html){
this.html=html;
this.init();
}
CreateDiv.prototype.init=function(){
var div=document.createElement('div');
div.innerHTML=this.html;
document.body.appendChild(div);
}
var ProxySingletonCreateDiv=(function(){
var instance;
return function(html){
if(!instance){
instance=new CreateDiv(html);
}
return instance;
}
})()
var a=new ProxySingletonCreateDiv('aa');
var b=new ProxySingletonCreateDiv('bb');
console.log(a===b); //true
惰性单例,需要的时候才创建实例
var getSingle = function(fn){
var result;
return function(){
return result || (result=fn.apply(this,arguments));
};
};
var createSingleIframe=getSingle(function(){
var iframe=document.createElement('iframe');
document.body.appendChild(iframe);
return iframe;
});
document.getElementById('btn').onclick=function(){
var createSingleIframe=new createSingleIframe();
createSingleIframe.src='https:www.baidu.com';
}