当前位置:首页 > 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实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swip…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前…

js实现图片预览

js实现图片预览

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

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClip…