单例模式
定义:保证一个类就有一个实例,并提供一个访问它的全局访问点。
JavaScript中的单例模式
JavaScript是一门无类(class-free)语言,传统的单例模式实现并不适用。
单例模式的核心:确保只有一个实例,并提供全局访问。
通用的惰性单例
把管理单例的逻辑封装在getSingle函数内部,创建对象的方法 fn 被当成参数动态传入 getSingle 函数:
闭包和高阶函数
var getSingle = function(fn){ var result; return function(){ return result || (result = fn.apply(this,arguments)) } }
场:1:登录浮窗在页面上总是唯一的
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 = createSingleLoginLayer(); loginLayer.style.display = 'block' }
场景2:创建唯一的iframe用于动态加载第三方页面:
var createSingleIframe = getSingle(function(){ var iframe = document.createElement('iframe'); document.body.appendChild(iframe) return iframe }) document.getElementById('loginBtn').onclick = function(){ var loginLayer = createSingleIframe(); loginLayer.src = 'http://baidu.com'; }