正文
《JS设计模式笔记》 1,单例模式
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
<script type="text/javascript">
//单例模式 //1,每次点击都会生成一个新的div
var createMask=function () {
return document.body.appendChild(document.createElement(div));
}
$("button").click(function(){
var mask=createMask();
mask.show();
}); //2,有可能这个mask会永远也用不上
var mask=document.body.appendChild(document.createMask("div"));
$("button").click(function(){
mask.show();
}); //3,1)函数体内改变了变量mask的引用,在多人协作的项目中,createMask是个不安全的函数。2)另一方面,mask这个全局变量不是非需不可。
var mask;
var createMask=function(){
if(mask){
return mask;
}
else{
mask=document.body.appendChild(document.createElement(div));
return mask;
}
};
//4,用闭包的形式,只生成一个mask
var createMask=function(){
var mask;
return function(){
return mask||(mask=document.body.appendChild(document.createElement(div)));
};
}()
//5,最终版本
var singleton=function(fn){
var result;
return function(){
return result||(result=fn.apply(this,arguments));
}
}
var createMask=singleton(function(){
return document.body.appendChild(document.createElement("div"));
});
用一个变量来保存第一次的返回值,如果它已经被赋过值,那么在以后的调用中,优先返回该值,
</script>