全局变量结合实现惰性的单例:
惰性单例模式:在需要创建的的时候才创建对象,这种技术在实际开发当中非常的有用
惰性:在点击按钮时才创建对象比如我们的创建弹框的代码封装在一个函数当中,当点击按钮的时候再创建,而不是在页面加载的时候就创建,导致白白浪费了DOM节点
单例:如果这个对象已经创建过了,那么直接返回,否则新创建,
我们把管理逻辑的代码封装在getSingle函数当中,把创建对象的方法作为参数传入,因为result在闭包中所以不会被销毁
如果在将来的请求当中result已经被赋值那么直接返回这个值
var getSingle = function(fn) { var result; //把result放在闭包里永远不会被销毁 return function(fn) { /* if (!result) { return result = fn.apply(this, arguments); } else { return result; }*/ //用逻辑或修改,它是一个短路操作符,如果第一个操作符true就不会对第二个操作数求值 //这里的this值指window,调用了fn return result||result=fn.apply(this,argument); } } //创建弹框的代码 var createLogin=function(){ var div=document.createElement("div"); div.innerHTML="弹框"; document.body.appendChild(div); div.style.display="none"; return div; } //保证唯一性 var createSingleLogin=getSingle(createLogin); //保证惰性 document.getElementById("btn").onclick=function(){ var login=createLogin(); login.style.display="block"; }
在实际开发中,getSingle函数不仅可以用于创建任何唯一的对象。还可以