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'
相关推荐
Entropy-Lee26 分钟前
JavaScript 语句和函数
开发语言·前端·javascript
Wcowin1 小时前
MkDocs文档日期插件【推荐】
前端·mkdocs
xw52 小时前
免费的个人网站托管-Cloudflare
服务器·前端
网安Ruler2 小时前
Web开发-PHP应用&Cookie脆弱&Session固定&Token唯一&身份验证&数据库通讯
前端·数据库·网络安全·php·渗透·红队
!win !2 小时前
免费的个人网站托管-Cloudflare
服务器·前端·开发工具
饺子不放糖2 小时前
基于BroadcastChannel的前端多标签页同步方案:让用户体验更一致
前端
饺子不放糖2 小时前
前端性能优化实战:从页面加载到交互响应的全链路优化
前端
Jackson__2 小时前
使用 ICE PKG 开发并发布支持多场景引用的 NPM 包
前端
饺子不放糖2 小时前
前端错误监控与异常处理:构建健壮的Web应用
前端
cos2 小时前
FE Bits 前端周周谈 Vol.1|Hello World、TanStack DB 首个 Beta 版发布
前端·javascript·css