• [JavaScript] 单例模式


    特点 一个类只能构造出唯一实例

    条件

    1.确保只有一个实例 ; 2.可以全局访问

    适用

     适用于弹框的实现, 全局缓存
    实现单例模式
    const singleton = function(name) {
      this.name = name
      this.instance = null
    }
    
    singleton.prototype.getName = function() {
      console.log(this.name)
    }
    
    singleton.getInstance = function(name) {
      if (!this.instance) { // 关键语句
        this.instance = new singleton(name)
      }
      return this.instance
    }
    
    // test
    const a = singleton.getInstance('a') // 通过 getInstance 来获取实例
    const b = singleton.getInstance('b')
    console.log(a === b)
    
    弹框层的实践
    const createLoginLayer = function() {
      const div = document.createElement('div');
      div.innerHTML = '登入浮框';
      div.style.display = 'none';
      document.body.appendChild(div);
      return div;
    }
    
    const getSingle = function(fn) {
      let result;
      return function() {
        return result || (result = fn.apply(this, arguments));
      }
    }
    
    const createSingleLoginLayer = getSingle(createLoginLayer);
    
    document.getElementById('loginBtn').onclick = function() {
      let loginLayer = createSingleLoginLayer();
      if( createSingleLoginLayer().style.display == "none" ){
        loginLayer.style.display = 'block';
      }else{
        loginLayer.style.display = 'none';
      }
      
    }
  • 相关阅读:
    简单数列极限证明
    既然已经半退役了,就写点新东西吧
    快速幂(整数+实数)
    D. Constant Palindrome Sum 差分+思维
    排序网络
    ClickHouse数据同步
    C++ 复习
    使用mac查看iphone uuid方法
    15. 蓝绿发布导致需求不能验证
    通过反射获取对象的属性名、属性值
  • 原文地址:https://www.cnblogs.com/SoYang/p/15558346.html
Copyright © 2020-2023  润新知