开发者社区> 问答> 正文

JavaScript单例模式?

展开
收起
前端问答 2019-12-30 12:41:52 2860 0
1 条回答
写回答
取消 提交回答
  • 前端问答小助手

    单例模式很常用,比如全局缓存、全局状态管理等等这些只需要一个对象,就可以使用单例模式。

    单例模式的核心就是保证全局只有一个对象可以访问。因为 JS 是门无类的语言,所以别的语言实现单例的方式并不能套入 JS 中,我们只需要用一个变量确保实例只创建一次就行,以下是如何实现单例模式的例子

    class Singleton {
      constructor() {}
    }
    
    Singleton.getInstance = (function() {
      let instance
      return function() {
        if (!instance) {
          instance = new Singleton()
        }
        return instance
      }
    })()
    
    let s1 = Singleton.getInstance()
    let s2 = Singleton.getInstance()
    console.log(s1 === s2) // true
    
    

    在 Vuex 源码中,你也可以看到单例模式的使用,虽然它的实现方式不大一样,通过一个外部变量来控制只安装一次 Vuex

    let Vue // bind on install
    
    export function install (_Vue) {
      if (Vue && _Vue === Vue) {
        // 如果发现 Vue 有值,就不重新创建实例了
        return
      }
      Vue = _Vue
      applyMixin(Vue)
    }
    
    2019-12-30 12:42:20
    赞同 1 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
JavaScript面向对象的程序设计 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载