单例模式用于创建某一“类”的唯一实例。
举个例子,某个页面多处需要使用公用一个弹窗,我们把弹窗当做一个类,但是并不需要每次都new一个出来(虽然这么做也可以,但是浪费资源),这种情况使用单例模式尤其合适。
// 弹窗的构造函数var Dialog = function(options) {}// 获取唯一实例的包装类var OnlyDialog = (function () {var instancereturn function (options) {if (!instance) {instance = new Dialog(options)}return instance}})()var a = new OnlyDialog()var b = new OnlyDialog()console.log(a === b)// true
既然如此,可以把创建唯一实例的方法抽出来,作为一个通用的获取唯一实例的方案
var getSingle = function (fn) {var resultreturn function () {return result || (result = fn.apply(this, arguments))}}var getSingleDialog = getSingle(Dialog)var dialogA = getSingleDialog('a')var dialogB = getSingleDialog('b')console.log(dialogA === dialogB)// true,第二次传入的'b'不生效
