Last active
August 29, 2015 14:21
-
-
Save Janking/464283d537084491b457 to your computer and use it in GitHub Desktop.
惰性单例模式
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//惰性单例模式 | |
<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