在JavaScript开发里,单例模式用来确保某个对象在整体程序中只被创建一次,并提供全局访问点。它常用于配置管理、日志记录、状态仓库等只需要一个实例的场景。下面先了解几种主流写法。

一、使用对象字面量
最简单的方式是直接用对象字面量,它在脚本加载时就已经是一个唯一实例。适合不需要延迟初始化的简单情况。
// 对象字面量本身就是单例
var Singleton = {
name: 'config',
getValue: function() {
return this.name;
}
};
console.log(Singleton.getValue());
二、利用闭包实现私有实例
通过闭包把实例保存在私有作用域中,对外只暴露获取函数,可以避免全局变量被随意修改。
var Singleton = (function() {
var instance;
function createInstance() {
return { id: Math.random() };
}
return {
getInstance: function() {
if (!instance) {
instance = createInstance();
}
return instance;
}
};
})();
var a = Singleton.getInstance();
var b = Singleton.getInstance();
console.log(a === b); // true
三、ES6类的静态属性方式
在ES6中可以用class配合静态属性来存储唯一实例,代码更贴近传统面向对象语言。
class Singleton {
constructor() {
if (Singleton.instance) {
return Singleton.instance;
}
this.data = 'hello';
Singleton.instance = this;
}
}
const s1 = new Singleton();
const s2 = new Singleton();
console.log(s1 === s2); // true
四、懒加载单例
懒加载指第一次调用时才创建实例,能节省启动时的内存开销。
let lazyInstance = null;
function getLazySingleton() {
if (lazyInstance === null) {
lazyInstance = { createdAt: Date.now() };
}
return lazyInstance;
}
console.log(getLazySingleton() === getLazySingleton());
总结
上面几种JavaScript单例实现方式各有特点:对象字面量最简单,闭包更安全,ES6类写法清晰,懒加载更省资源。实际项目中应根据是否需要延迟创建和代码风格来选择。
JavaScript单例模式设计模式修改时间:2026-07-28 01:27:14