前端(JavaScript)中单例模式的实现与应用实例_javascript技巧

前端单例模式与后端实现的核心思想相同,但由于JavaScript的运行环境和语言特性,实现方式有所不同:

const singleton = { property1: "value1", property2: "value2", method1() { // 方法实现 }, method2() { // 方法实现 }};// 使用singleton.method1();

特点

class Singleton { constructor() { if (Singleton.instance) { return Singleton.instance; } this.property = 'value'; Singleton.instance = this; // "私有"成员约定(实际仍可访问) this._privateProperty = 'private'; } // 静态方法获取实例 static getInstance() { if (!Singleton.instance) { Singleton.instance = new Singleton(); } return Singleton.instance; } publicMethod() { console.log('Public method'); } // "私有"方法约定 _privateMethod() { console.log('Private method'); }}// 使用const instance1 = new Singleton(); // 或者 Singleton.getInstance()const instance2 = new Singleton();console.log(instance1 === instance2); // true

注意:ES6 class中的"私有"成员(以下划线开头)只是约定,实际上仍可访问。ES2022正式引入了私有字段语法:

// Redux的store是典型的单例import { createStore } from 'redux';const store = createStore(reducer);

全局配置管理

// cache.jsconst cache = { data: {}, get(key) { return this.data[key]; }, set(key, value) { this.data[key] = value; }, clear() { this.data = {}; }};export default cache;

模态框/对话框管理

class Singleton { private static instance: Singleton; private privateProperty: string = 'private'; private constructor() {} // 私有构造函数 public static getInstance(): Singleton { if (!Singleton.instance) { Singleton.instance = new Singleton(); } return Singleton.instance; } public publicMethod(): void { console.log('Public method'); } private privateMethod(): void { console.log('Private method'); }}// 使用const instance1 = Singleton.getInstance();const instance2 = Singleton.getInstance();console.log(instance1 === instance2); // true

// 创建Context本身就是单例const AppContext = React.createContext();// 提供值 {/* 组件树 */}// 消费值const value = useContext(AppContext);

Vue中的provide/inject

// 提供export default { provide() { return { sharedService: this.sharedService }; }, data() { return { sharedService: new SharedService() }; }};// 注入export default { inject: ['sharedService']};

Angular中的服务

@Injectable({ providedIn: 'root' // 应用级单例})export class DataService { // 服务实现}

单例模式在前端领域的发展呈现出两个明显趋势:

框架集成化:现代前端框架已经将单例模式的思想内化为状态管理方案(如Redux Store、Vue Pinia Store)

微前端适配:在微前端架构中,单例模式需要特殊设计以实现跨应用共享:

// 主应用导出window.sharedServices = window.sharedServices || { auth: new AuthService(), analytics: new AnalyticsService()};

在实际开发中,应当根据以下因素选择实现方式:

到此这篇关于前端(JavaScript)中单例模式的实现与应用的文章就介绍到这了,更多相关JS中单例模式实现内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!


本文地址: https://www.earthnavs.com/jishuwz/9a52269733eb496607b1.html
全局中部横幅
程序员导航

黑客街一家做网络安全爱好者导航的web安全网站!专注Hack站点收集,为广大网络安全爱好者提供网站导航,为小白提供黑客入门网站的安全站点收集

纳米AI

智能搜索、答案引擎,AI分析视频、PDF、网页等、自动生成思维导图...

宇阳

记录所学知识,缩短和大神的差距!

腾讯视频

腾讯视频官方网站,提供最新热门电视剧、电影、综艺、动漫、纪录片等高清正版视频在线观看。海量独家内容持续更新,涵盖国产剧、美剧、韩剧、院线大片、热门综艺,支持超清流畅播放,尽在腾讯视频,当前热播《仙逆》《白日提灯》《五哈6》,支持高清在线观看。

AnyKnew

该站点未添加描述description...

Feedly:

Market-leadingsolutionformonitoringtopicsthatmatter

ARISTA456:

ARISTA456adalahsitusslotyanglagingeri,dimanadalam1xspinpemainbisalangsungWD12jutarasakankeseruandankeuntunganluarbiasahanyadiARISTA456.

URLOS

基于容器技术的新一代主机管理系统,将网站、小程序和APP等应用运行在多台主机上,弹性加减硬件,单机故障不影响在线业务。

第一家混合云上市公司

青云作为技术领先的企业级云服务商与数字化解决方案提供商,坚持核心代码自研,构建端到端的数字化解决方案,持续打造云原生最佳实践,以中国科技服务数字中国。

555电影

555电影 (www.555dy.tv)-看电影,拯救世界!奈飞Netflix免费看,每天更新热火欧美日韩剧,最新韩国电影,在线免费电影网,VIP视频免费看