javascript 设计模式之惰性单例
首先看代码
var getSingle = function(fn){ var result; return function(){ return result || (result = fn.apply(this,arguments)); } };
在这里,我们可以将我们想使用单例的方法用参数 fn 的形式传入 getSingle 中,之后再让 getSingle 函数返回一个新函数,并且用一个变量 result 来保存 fn 的计算结果,因为 result 变量在闭包中,永远不会被销毁,在将来的请求中,如果 result 已经被赋值,那么它将返回这个值.
以下是实现一个点击按钮创建并显示悬浮窗的 demo.
var createLayer = function(){ var div = document.createElement("div"); div.innerHTML = "提示信息"; div.style.display = "none"; document.body.appendChild(div); return div; } var createSingleLayer = getSingle(createLayer); document.getElementById("btn").onclick = function(){ var Layer = createSingleLayer(); Layer.style.display = "block"; }
那么不论点击几次,该 div 只会被创建一次.