首页 > 代码库 > 《javascript设计模式与开放实践》学习(五)惰性单例模式
《javascript设计模式与开放实践》学习(五)惰性单例模式
在JS中可以使用代理来实现单例模式。如创建唯一DIV的场景:
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 ProxySingleCreateDiv=(function () { var instance; return function (html) { if(!instance){ instance=new CreateDiv(html); } return instance; } })(); var a=new ProxySingleCreateDiv(‘sven1‘); var b=new ProxySingleCreateDiv(‘sven2‘);
通过代理ProxySingleCreateDiv实现了创建唯一Div。它的好处就是创建Div的函数CreateDiv并不需要管是否曾经创建过该对象,一切业务逻辑交给代理来处理。
模拟这样的场景,如果创建Div的时候不是页面加载的时候预先创建好,而是点击某个button才进行创建
var getSingle=function (fn) { var result; return function () { return result||(result=fn.apply(this,arguments));//判断result是否为空 } }; var createLoginLayer=function () { var div=document.createElement(‘div‘); div.innerHTML=‘我是登录浮窗‘; div.style.display=‘none‘; document.body.appendChild(div); return div; }; var createSingleLoginLayer=getSingle(createLoginLayer); document.getElementById(‘loginBtn‘).onclick=function () { var loginLayer=new createSingleLoginLayer(); loginLayer.style.display=‘block‘; }
这代代码最核心的就是用到了getSingle方法,里面定义的result因为在闭包中,不会被销毁。
《javascript设计模式与开放实践》学习(五)惰性单例模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。