美文网首页
JavaScript单例模式

JavaScript单例模式

作者: 晓蟲QwQ | 来源:发表于2020-12-28 23:34 被阅读0次

单例模式的定义是:

  1. 保证一个类仅有一个实例。
  2. 提供一个访问它的全局访问点。

由于JavaScript是基于对象编程,没有类的概念。所以可以直接将全局变量当成的单例来使用。但是该方法会污染全局作用域,且易被覆盖。可通过以下方式解决。

  • 使用命名空间
var namespace1 =  {
    a: function(){
       alert(1);
    },
    b: function() {
      alert(2);
    }
};

可用以下方法动态创建命名空间(引自Object-Oriented JavaScript一书):

var MyApp = {};

MyApp.namespace = function(name) {
    var parts = name.split('.');
    var current = MyApp;
    for(var i in parts) {
        if(!current[parts[i]]){
            current[parts[i]] = {};
        }
        current = current[parts[i]];
    }
};

MyApp.namespace('event');
MyApp.namespace('dom.style');

//上述代码结果:
MyApp = {
    event:{},
    dom:{
        style:{}
    }
};
  • 使用闭包封装私有变量
var user = (function(){
    var __name = 'sven',
        __age = 29;
        
    return {
        getUserInfo: function() {
            return __name + '-' + __age;
        }
    }
})

单例模式的应用

以上两种模式需要事先加载,影响性能,可以使用惰性单例模式实现需要时加载。
使用案例:

  1. 创建div浮窗,如登录浮窗,在页面中唯一。
  2. ajax渲染列表时的事件委托绑定,事件只需绑定一次。

创建单例管理模块

var getSingle = function(fn) { //fn为无单例模式的功能构造函数
    var result; // 闭包保存创建的单例
    
    //返回具有单例模式的构造函数
    //存在单例返回原单例,不存在则使用fn创建该构造函数的单例
    return function() {
        return result || (result = fn.apply(this,arguments));
    }
}

编写功能构造函数,并使用单例管理模块创建其单例版

var createLoginLayer = function(){
    var div = document.createElement('div');
    div.innerHTML = '我是登录浮窗';
    div.style.display = 'none';
    document.body.appendChild(div);
    return div;
}; 

var createSingleLoginLayer = getSingle(createLoginLayer);

document.getElementById('loginBtn').onclick = function(){
    var loginLayer = createSingleLoginLayer();
    loginLayer.style.display = 'block';
}

相关文章

  • Node.js与单例模式

    1、前端的JavaScript单例模式 单例模式是非常常用的设计模式,前端的JavaScript中单例模式代码可能...

  • 前端开发工程师必备系列-几个简单的JS单例模式

    前端开发工程师必备系列-几个简单的JS单例模式 JavaScript单例模式 1. 单例模式 单例模式(Singl...

  • 单例模式

    一、实现单例模式 或者 二、透明的单例模式 三、用代理实现单例模式 四、JavaScript中的单例模式 在Jav...

  • JavaScript设计模式二(单例模式)

    JavaScript设计模式二(单例模式) 这边文章主要是JavaScript中的单例模式定义: 保证一个类仅有一...

  • JavaScript 设计模式(上)——基础知识

    系列链接 JavaScript 设计模式(上)——基础知识 JavaScript 设计模式(中)——1.单例模式 ...

  • JavaScript单例模式

    前言 单例模式的定义:保证一个类仅仅有一个实例,并提供一个访问他的全局访问点。意义:有的时候,一些对象我们仅仅需要...

  • JavaScript 单例模式

    定义 确保一个类仅有一个实例,并提供一个访问它的全局访问点。 单例模式使用的场景 比如线程池、全局缓存等。我们所熟...

  • JavaScript 单例模式

    在很多情况下,我们需要全局使用某一个实例,这个时候我们可以使用单例模式来解决这个问题!话不多说,直接上代码!老规矩...

  • JavaScript单例模式

    单例模式的定义是:保证一个类仅有一个实例。提供一个访问它的全局访问点。 由于JavaScript是基于对象编程,没...

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: Android Application 中使用单例模式:

网友评论

      本文标题:JavaScript单例模式

      本文链接:https://www.haomeiwen.com/subject/scmgnktx.html