当前位置:首页 > JavaScript

js实现单例模式

2026-01-30 15:45:28JavaScript

单例模式的基本概念

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

使用对象字面量

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

js实现单例模式

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

使用闭包和立即执行函数

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

js实现单例模式

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中,模块系统天然支持单例模式。一个模块只会被加载一次,导出的对象就是单例。

// 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实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…

js 实现拖拽

js 实现拖拽

实现拖拽的基本步骤 在JavaScript中实现拖拽功能需要监听几个关键事件:mousedown、mousemove和mouseup。以下是实现的基本逻辑。 监听目标元素的mousedown事件,记…

js 实现全选

js 实现全选

实现全选功能的方法 使用 JavaScript 实现全选功能通常需要操作复选框(checkbox)的状态。以下是几种常见的实现方式。 通过 DOM 操作实现全选 // 获取全选复选框和子复选框 co…