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'
相关推荐
小兵张健39 分钟前
价值1000的 AI 工作流:Codex 通用前端协作模式
前端·aigc·ai编程
sunny_1 小时前
面试踩大坑!同一段 Node.js 代码,CJS 和 ESM 的执行顺序居然是反的?!99% 的人都答错了
前端·面试·node.js
拉不动的猪1 小时前
移动端调试工具VConsole初始化时的加载阻塞问题
前端·javascript·微信小程序
ayqy贾杰3 小时前
Agent First Engineering
前端·vue.js·面试
IT_陈寒3 小时前
SpringBoot实战:5个让你的API性能翻倍的隐藏技巧
前端·人工智能·后端
iceiceiceice4 小时前
iOS PDF阅读器段评实现:如何从 PDFSelection 精准还原一个自然段
前端·人工智能·ios
大金乄4 小时前
封装一个vue2的elementUI 表格组件(包含表格编辑以及多级表头)
前端·javascript
葡萄城技术团队5 小时前
【性能优化篇】面对万行数据也不卡顿?揭秘协同服务器的“片段机制 (Fragments)”
前端
程序员阿峰5 小时前
2026前端必备:TensorFlow.js,浏览器里的AI引擎,不写Python也能玩转智能
前端
Jans5 小时前
Shipfe — Rust 写的前端静态部署工具:一条命令上线 + 零停机 + 可回滚 + 自动清理
前端