Skip to content

Instantly share code, notes, and snippets.

@Janking
Last active August 29, 2015 14:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Janking/464283d537084491b457 to your computer and use it in GitHub Desktop.
Save Janking/464283d537084491b457 to your computer and use it in GitHub Desktop.
惰性单例模式
//惰性单例模式
<a href="javascript:;" id="btn1">1111111</a>
<br>
<br>
<br>
<br>
<br>
<a href="javascript:;" id="btn2">2222222</a>
var getSingle = function(fn){
var result;
//当执行getSingle时,返回一个闭包,以延长result的生命周期,
return function(){
//判断result是否有效,若第一次调用getSingle,则为undefined
return result || (result = fn.apply(this,arguments));
}
}
var createLayer = function(){
var div = document.createElement('div');
div.innerHTML = 'layer';
div.style.display='none';
document.body.appendChild(div);
return div;
}
//此时第一次调用getSingle,result 变为function createLayer,并保持它的生命周期
//除非将getSingleLayer = null;否则result将一直存在;
var getSingleLayer = getSingle(createLayer);
document.getElementById('btn1').addEventListener('click',function(event){
var loginLayer = getSingleLayer();
loginLayer.style.display = 'block';
});
document.getElementById('btn2').addEventListener('click',function(event){
var loginLayer = getSingleLayer();
console.log(loginLayer)
});
//2015年5月26日23:51:03
//利用单例模式重构layer插件失败了:
//问题1:插件结构的设计已经定型,如果要改,得全盘重来,那所有引用次插件的项目都全部重做
//问题2:单例模式的弊端在于必须实现实例化,将会面临把对象暴露在全局的问题。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment