当前位置:首页 > JavaScript

js实现单例模式

2026-04-04 07:26:02JavaScript

单例模式的概念

单例模式是一种设计模式,确保一个类只有一个实例,并提供全局访问点。在JavaScript中,可以通过多种方式实现单例模式。

使用对象字面量

最简单的单例模式实现方式是直接使用对象字面量。对象字面量在JavaScript中本身就是单例的。

const singleton = {
  property: 'value',
  method() {
    console.log('Method called');
  }
};

使用闭包和立即执行函数

通过闭包和立即执行函数(IIFE)可以创建一个私有作用域,确保实例的唯一性。

const Singleton = (function() {
  let instance;

  function createInstance() {
    const object = new Object('I am the instance');
    return object;
  }

  return {
    getInstance() {
      if (!instance) {
        instance = createInstance();
      }
      return instance;
    }
  };
})();

const instance1 = Singleton.getInstance();
const instance2 = Singleton.getInstance();
console.log(instance1 === instance2); // true

使用ES6类

在ES6中,可以通过类的静态方法和私有变量实现单例模式。

class Singleton {
  static #instance;

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

  static getInstance() {
    if (!Singleton.#instance) {
      Singleton.#instance = new Singleton();
    }
    return Singleton.#instance;
  }
}

const instance1 = new Singleton();
const instance2 = new Singleton();
console.log(instance1 === instance2); // true

使用模块模式

JavaScript的模块系统天然支持单例模式,因为模块在首次导入时会被缓存,后续导入会返回相同的实例。

js实现单例模式

// singleton.js
let instance;

class Singleton {
  constructor() {
    if (instance) {
      throw new Error('Use getInstance() instead');
    }
    instance = this;
  }

  static getInstance() {
    if (!instance) {
      instance = new Singleton();
    }
    return instance;
  }
}

export default Singleton;

// app.js
import Singleton from './singleton.js';

const instance1 = Singleton.getInstance();
const instance2 = Singleton.getInstance();
console.log(instance1 === instance2); // true

注意事项

  • 单例模式可能导致全局状态,增加代码的耦合性。
  • 在多线程环境中需要额外处理,但JavaScript是单线程的,无需考虑此问题。
  • 单例模式适合用于需要全局访问点且唯一实例的场景,如配置管理、日志记录等。

标签: 模式js
分享给朋友:

相关文章

js实现验证码

js实现验证码

实现验证码的JavaScript方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const cha…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…