js常见的单例

前言

javascript在一些场景下会用到单例,当然这个其他平台所涉及的单例不一样,不需要考虑多线程加锁的问题,因此相对来说简单了一些

所以这篇文章就讲一下 javascript 中目前比较常用的单例实现方式

类构造方式

这种方式使用也是比较常见的,设置单例时可以支持使用new,也可以直接调用静态属性获取单例

js 复制代码
class Singleton {
    static #instance

    constructor() {
        if (Singleton.#instance) {
            return Singleton.#instance
        }
        Singleton.#instance = this
        this.name = "Singleton"
    }

    static get instance() {
        return new Singleton()
    }
}

const instance = Singleton.instance
const instance2 = new Singleton()
const instance3 = new Singleton()
console.log(instance === instance2, instance2 === instance3)

隐藏闭包构造方式

隐藏闭包也是早期就开始使用的一种方式,简单实用,使用隐藏闭包的方式返回一个对象,外部只能通过调用内部函数获取单例,也算是一种方式

js 复制代码
const Singleton = (function () {
    let singleton
    return {
        instance() {
            if (!singleton) {
                singleton = {} //这里创建对应的对象
            }
            return singleton
        }
    }
})()

const instance21 = Singleton.instance()
const instance22 = Singleton.instance()

console.log(instance21 === instance22)

es6模块方式导出方式

es6的模块的单例属性,直接导出一个单例对象,外部导出后可直接使用

js 复制代码
class Singleton {
}

export default new Singleton()


import singleton from './Singleton'
相关推荐
IT_陈寒2 分钟前
JavaScript性能优化:5个V8引擎隐藏技巧让你的代码提速50%
前端·人工智能·后端
菠菜盼娣10 分钟前
第三方插件 unplugin-icons
前端
敲代码的彭于晏15 分钟前
在迁移中学习 React 18:一份来自 React 17 的升级问题清单
前端·react.js
顾安r21 分钟前
12.17 脚本工具 自动化全局跳转
linux·前端·css·golang·html
踢球的打工仔22 分钟前
jquery的基本使用(2)
前端·javascript·jquery
阿蒙Amon28 分钟前
JavaScript学习笔记:16.模块
javascript·笔记·学习
DEMO派37 分钟前
前端javascript如何实现阅读位置记忆【可运行源码】
前端
苏打水com41 分钟前
第十七篇:Day49-51 前端工程化进阶——从“手动”到“自动化”(对标职场“提效降本”需求)
前端·javascript·css·vue.js·html
文心快码BaiduComate42 分钟前
Comate强力赋能:「趣绘像素岛」从体验泥潭到高性能可用的蜕变之路
前端·后端·程序员
『 时光荏苒 』44 分钟前
使用Vue播放M3U8视频流的方法
前端·javascript·vue.js