js单例模式

147 阅读1分钟

单例模式的原则:确保只有一个实例,并提供全局访问

面向对象——用代理实现的单例模式

将 创建类的方法 和 管理类的逻辑 解耦。

const CreateDiv = function(html){
    this.html = html
    this.init()
}
CreateDiv.prototype.init = function(){
    const div = document.createElement("div")
    div.innerHtml = this.html
    document.body.appendChild(div)
}
//引入代理类(代理模式)--利用闭包形成内部的instance变量,来确保只存在唯一实例
const ProxySingletonCreateDiv = (function(){
    let instance
    return function(html){
        return instance || ( instance = new CreateDiv(html) ) 
    }
})()
const a = new ProxySingletonCreateDiv("test")

JaveScript中的单例模式(单一职责原则)

//封装通用的管理单例的逻辑函数
const getSingle = function(fn){
    let result
    return function(){
         return result || ( result = fn.apply(this,arguments) )
    }
}

const createLoginLayer = function(){
    const div = document.createElement("div")
    div.innerHtml = "我是登录框"
    document.body.appendChild(div)
    return div
}
const createSingleLoginLayer = getSingle(createLoginLayer)