单例模式JS实现与使用场景
请用JavaScript实现一个线程安全的单例模式,并说明在前端开发中哪些场景适合使用单例模式。
回答
我是大山
// 方式一:利用模块化(ES Module)天然单例
// singleton.js
export const singleton = {
data: [],
add(item) { this.data.push(item); }
};
// 方式二:闭包实现
const Singleton = (function() {
let instance = null;
function createInstance() {
return { data: [], add(item) { this.data.push(item); } };
}
return {
getInstance() {
if (!instance) instance = createInstance();
return instance;
}
};
})();
// 方式三:class + 静态方法
class SingletonClass {
static #instance;
constructor() {
if (SingletonClass.#instance) return SingletonClass.#instance;
SingletonClass.#instance = this;
}
}
适用场景:全局状态管理(Vuex/Pinia/Redux store)、全局缓存、全局配置管理、日志记录器、请求拦截器、浏览器API封装(window.localStorage等)、模态框/loading等全局UI组件。