JavaScript 单例模式:从基础实现到延迟加载详解
作者:纸飞机时间:2026-10-24 23:32:43浏览:579
本文详细介绍 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;
}
}
})(); 作者最新文章
JS动态构建复杂嵌套JSON对象的方法
2026-11-05 15:41:52
JS负数取余为什么是负数?详解余数与模运算区别
2026-11-05 13:34:41
JS 解压出现乱码或报错怎么解决?
2026-11-05 12:32:38
JS 中 startsWith、indexOf 与正则判断字符串前缀的对比
2026-11-04 22:19:43
JS解析Excel后怎么将数据转换为JSON格式
2026-11-04 20:58:28
