前端(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
全局中部横幅
hao91收录网

网站收录网,主要提供网站快速收录,快速上排名,站点权重提升,网站收录提交,网站收录工具,同时提供最全的优秀名站。

精易论坛

富有学习气氛的编程技术论坛。易语言答疑互助模式,让新手的疑问得到解决,让高手接到软件定制业务。-精易e语言论坛!

微信公众平台

微信公众平台,给个人、企业和组织提供业务服务与用户管理能力的全新服务平台。

湖南在线

湖南在线是由湖南日报社主办的地方重点新闻门户网站,提供新闻信息、生活资讯、客户端、微博、活动策划、舆情、广告等服务,以传统报纸媒体为依托,创建了新湖南客户端,以新兴产业为一体的新型融媒体信息服务商、文化产业综合服务提供商。

杭州网

杭州网是杭州地区重点新闻门户网站,由杭州日报报业集团下属的杭州网络传媒有限公司运营。为杭州及周边人群提供新闻、资讯、互动、生活服务等多种网络服务。

中国青年网

中国青年网,1999年5月4日正式开通,共青团中央主办的中央重点新闻网站,是国内最大的青年主流网站。中国青年网竭诚服务青年的文化、心理、情感和创业需求,是共青团运用网络文化元素吸引青年的新载体和引导青年的新途径,为团组织通过新媒体融入青年提供有力支撑。中国青年网拥有400余个子网站,2000多个栏目,用文字、图片、动漫、音视频、论坛、博客、微博、手机、网上直播等多种手段,依托共青团中央丰富的资源,每天向全球网民发布丰富多彩的信息,内容包括政治、经济、社会、文化、娱乐、时尚、教育、心理等各个领域。

灵曜

灵曜是一款端口映射及内网穿透软件,使您无需服务器,无需公网IP,无需设置路由器即可对外发布应用,远程桌面,支付调试,NAS云盘,游戏联机等都可使用,支持http,https,tcp协议.

全考通资源网

全考通资源网提供考试资源下载,一级建造师、二级建造师、造价师、消防工程师、建筑师、资格考试、安全工程师、咨询工程师、公务员、考研、经济师、英语四六级等热门考试课件免费下载及分享平台。

B2B目录网

B2B站网址大全是全人工编辑的开放式网站分类目录资源平台,收录国内外、各行业优秀B2B网站,旨在为用户提供网站分类目录检索、优秀网站参考以及B2B推广服务。

老四收录

老四收录网(www.aaaua.com)致力于为用户提供最新、最全面的网站收录服务,让您的网站在网络中脱颖而出,提升可见性和访问量。