前端(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
全局中部横幅
虫部落

虫部落是一个纯粹的搜索知识、技术和经验分享平台,虫部落快搜、虫部落学术搜索等搜索聚合工具均为虫部落原创出品,搜索世界的乐趣,就在虫部落!

连接高校和企业

蓝桥云课是国内领先的IT在线编程及在线实训学习平台,专业导师提供精选的实践项目,创新的技术使得学习者无需配置繁琐的本地环境,随时在线流畅使用。以就业为导向, 提供编程、运维、测试、云计算、大数据、数据库等全面的IT技术动手实践环境, 提供Linux、Python、Java、C语言、Node.js、Hadoop、PHP、Docker、Git、 R、SQL、MongoDB、Redis、Swift、Spark等千门热门课程。

梦想思维优质互联网资源分享平台

梦想资源站-优质的互联网分享平台资源每日更新

知乎封神榜

致力于打造知乎第一门户,知乎新手必备神器,推荐知乎用户和话题,并进行分类和排名,提供准确的搜索功能。

国家数据

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

顶象

顶象防御云,致力于帮助企业构建自主可控的业务安全体系,通过智能无感验证码、端加固、设备指纹、实时决策、安全感知防御平台等产品解决业务欺诈威胁,防范化解各类网络黑灰产风险,让业务更加健康稳定,助力企业创新与增长。

有益网络

有益网络(www.150cn.com)是基于云计算的互联网产品提供商,专业提供域名注册、虚拟主机、云服务器、VPS主机、挂机宝、动态vps等产品和服务,配备超6星的客服技术服务团队。

导航巴巴

导航巴巴(www.dh88.cn)目录导航,导航巴巴为用户提供丰富的分类目录导航网站,免费提交优质网站,更多优化您的网站,同时为用户提供网站分类目录检索、优秀网站导航服务。

易航收录网

易航导航收录网,致力于为站长提供一站式的网站快速收录服务。我们专注于高效、自动化的收录流程,确保您的网站能够在百度、搜狗、360等主流搜索引擎中迅速获得索引。同时,我们提供友情链接交换平台,帮助站长提升网站权重,优化SEO效果。加入易航收录网,让您的网站曝光更快,流量更高!