zoukankan      html  css  js  c++  java
  • javascript单例模式

    单例模式:一个类只有一个实例,并提供一个访问它的全局访问点

    1.面向对象版的基于类的单例

    创建唯一的div节点

    var createDiv = (function() {
        var instance;
    
        var createDiv = function(html) {
            if (instance) return instance;
            this.html = html;
            this.init();
            return instance = this;
        };
    
        createDiv.prototype.init = function() {
            var div = document.createElement('div');
            div.innerHTML = this.html;
            document.body.appendChild(div);
        };
    
        return createDiv;
    }());
    
    var a = new createDiv('test1');
    var b = new createDiv('test2');
    
    console.log(a === b);   // true
    
    

    代理类实现单例将创建单例和管理单例分离

    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 ProxySingleton = (function(){
        var instance;
        return function(html) {
            if (!instance) {
                instance = new createDiv(html);
            }
            return instance;
        }
    }());
    
    var a = new ProxySingleton('test1');
    var b = new ProxySingleton('test2');
    
    console.log(a === b);   // true
    

    2. javascript中的单例模式

    点击登陆按钮时,创建登陆浮窗并弹出,浮窗唯一。之后再点击,操作已经存在的浮窗

    惰性单例:需要的时候才创建对象

    var createLoginLayer = (function() {
        var div;
        return function() {
            if (!div) {
                div = document.createElement('div');
                div.innerHTML = 'login';
                div.style.display = 'none';
                document.body.appendChild(div);
            }
    
            return div;
        }
    }());
    
    document.getElementById('login').onclick = function() {
        var loginLayer = createLoginLayer();
        loginLayer.style.display = 'block';
    }
    

    通用的惰性单例,将创建单例和管理单例分离

    var createLoginLayer = function() {
        div = document.createElement('div');
        div.innerHTML = 'login';
        div.style.display = 'none';
        document.body.appendChild(div);
        return div;
    }
    
    var getSingle = function(fn) {
        var result;
        return function() {
            return result || (result = fn.apply(this, arguments));
        }
    };
    
    var createSingleLoginLayer = getSingle(createLoginLayer);
    
    document.getElementById('login').onclick = function() {
        var loginLayer = createSingleLoginLayer();
        loginLayer.style.display = 'block';
    }
    
  • 相关阅读:
    [对对子队]会议记录4.10(Scrum Meeting 1)
    [对对子队]团队任务拆解Alpha
    [对对子队]功能规格说明书
    [对对子队]技术规格说明书
    团队项目选择
    团队作业第四次—项目系统设计与数据库设计
    团队作业第三次—项目需求分析
    团队作业第二次——团队Github实战训练
    团队作业第一次—团队展示和项目展示
    贡献分分配规则
  • 原文地址:https://www.cnblogs.com/u14e/p/6723982.html
Copyright © 2011-2022 走看看