JavaScript 单例模式:从基础实现到延迟加载详解

作者:纸飞机

时间:2026-10-24

浏览:578

本文详细介绍 JavaScript 中单例模式的两种实现方式。首先展示基础结构,随后针对立即执行函数导致代码加载时即实例化的问题,引入延迟加载方案。通过闭包和私有变量控制实例创建时机,确保仅在首次调用时生成对象,从而优化资源使用。

文章目录

JavaScript 单例模式基础与延迟加载实现

单例模式的核心在于确保一个类仅有一个实例,并提供全局访问点。


// 代码结束

以下是基础实现代码:

 
MyNamespace.Singleton = function() {
return {};
}(); 

例如:


// 代码结束

代码如下:

 
MyNamespace.Singleton = (function() {
return { // 公共成员。
publicAttribute1: true,
publicAttribute2: 10,
publicMethod1: function() {
... 
}, 
publicMethod2: function(args) {
... 
} 
}; 
})(); 

然而,上述单例在代码加载阶段便已实例化。如何实现延迟加载?参考 C# 中的单例实现思路,可采用如下模式:


// 代码结束

代码如下:

 
MyNamespace.Singleton = (function() {
function constructor() { // 所有常规单例逻辑置于此处。
... 
} 
return {
getInstance: function() {
// 控制逻辑置于此处。
} 
} 
})(); 

具体而言,将单例创建逻辑封装在 constructor 中,仅在首次调用时进行实例化:


完整代码如下:


// 代码结束

代码如下:

 
MyNamespace.Singleton = (function() {
var uniqueInstance; // 持有单个实例的私有属性。
function constructor() { // 所有常规单例逻辑置于此处。
... 
} 
return {
getInstance: function() {
if(!uniqueInstance) { // 若实例不存在,则进行实例化。
uniqueInstance = constructor();
} 
return uniqueInstance;
} 
} 
})(); 

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章