当前位置:首页 > JavaScript

js实现单例模式

2026-01-30 15:45:28JavaScript

单例模式的基本概念

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

使用对象字面量

最简单的单例实现方式是直接使用对象字面量。由于对象字面量在JavaScript中本身就是单例,无需额外处理。

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

使用闭包和立即执行函数

通过闭包和立即执行函数(IIFE)可以隐藏实例并控制其创建过程。

const Singleton = (function() {
  let instance;

  function createInstance() {
    return {
      property: 'value',
      method() {
        console.log('Method called');
      }
    };
  }

  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 {
  constructor() {
    if (Singleton.instance) {
      return Singleton.instance;
    }
    this.property = 'value';
    Singleton.instance = this;
  }

  method() {
    console.log('Method called');
  }
}

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

使用模块系统

在现代JavaScript中,模块系统天然支持单例模式。一个模块只会被加载一次,导出的对象就是单例。

js实现单例模式

// singleton.js
let instance = null;

export default class Singleton {
  constructor() {
    if (instance) {
      return instance;
    }
    this.property = 'value';
    instance = this;
  }

  method() {
    console.log('Method called');
  }
}

// 使用
import Singleton from './singleton.js';
const instance1 = new Singleton();
const instance2 = new Singleton();
console.log(instance1 === instance2); // true

注意事项

单例模式在全局状态下可能带来一些问题,如测试困难、隐藏的依赖关系等。应根据实际需求谨慎使用。

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

相关文章

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…