【Javascript设计模式】2.Module(模块)模式

JavaScript模块设计模式:IIFE封装与Revealing模式实战 JavaScript模块化本质是作用域隔离与接口控制,而非仅依赖ES6 import/export语法。其核心原理基于函数作用域、立即执行特性与引用不可达机制,实现变量私有化、副作用收敛与状态可控。技术价值在于保障老旧系统兼容性(如IE11、泛微OA、宇视SDK)、降低内存泄漏风险(避免javascript heap out of memory)、提升可测试性与协作契约性。典型应用场景包括中后台表单验证、政府政务系统JS嵌入、摄像头Web SDK轻量集成等。本文聚焦IIFE与Revealing Module 阅读详情

⭐️ 本文首发自 前端修罗场(点击加入),是一个由 资深开发者 独立运行 的专业技术社区,我专注 Web 技术、Web3、区块链、答疑解惑、面试辅导以及职业发展。博主创作的 《前端面试复习笔记》(点击订阅),广受好评,已帮助多人提升实力、拿到 offer。现在订阅,私聊我即可获取一次免费的模拟面试机会,帮你评估知识点的掌握程度,获得更全面的学习指导意见!

模块能帮助我们清晰分离和组织项目中的代码单元。
在js中有几种实现模块的方法:

  1. 对象字面量表示法;
  2. Module模式
  3. AMD模块
  4. CommonJs模块
  5. ES Harmony模块

本篇中我们主要介绍“对象字面量”表示法。

2.1对象字面量

示例:

<script type="text/javascript">
	var myObjectLiteral = {
		varibaleKey : varibaleValue,
		function: function () {
			//实现
		}
	};
</script>
<!-- 注意 
1.对象字面量不需要使用new实例化;
2.不能用在一个语句的开头,否则可能会被解释为一个块的开始;
-->

2.2 Module(模块)模式

JS中,Module模式用于进一步模拟类的概念。它能够使一个单独的对象拥有公有、私有方法和变量,从而屏蔽来自
全局作用域的特殊部分。进而降低了与其他脚本冲突的可能性。

其中,私有部分,主要利用了“闭包”。由于闭包的存在,声明的变量和方法只能在该模式内部可用。但在返回对象上
定义的变量和方法,外部使用者是能够调用的。

一个关于购物车的例子:

<script type="text/javascript">
	var basketModule = (function() {
		//私有
		var baskey = [];
		function doSomethingPrivate () {
			//实现
		}
		function doSomethingElsePrivate() {
			//实现
		}
		//返回一个暴露出的公有对象API
		return {
			//添加item到购物车
			addItem: function (values) {
				basket.push(values);
			},
			//获取购物车里的item数
			getItemCount: function() {
				return basket.length;
			},
			//私有函数的公有形式别名
			doSomething: doSomethingPrivate,
			//获取购物车里所有item的价格总值
			getTotal: function() {
				var itemCount = this.getItemCount(),
					total = 0;
				while (itemCount--) {
					total += basket[itemCount].price;

				}
				return total;
			}
		}

	})();
	//交互
	basketModule.addItem({
		item: "bread",
		price: 0.5
	});
	basketModule.addItem({
		item: "酱油",
		price: 1.5
	});
	//输出结果
	console.log(basketModule.getItemCount());//2
	console.log(basketModule.getTotal());//0.5+1.5 = 2
	//注意
	console.log(basketModule.basket);//underfined。因为basket没有暴露在公有的API中
</script>

优点:

  1. 整洁;
  2. 支持私有数据。在Module模式中,代码的公有部分能够接触到私有部分,而外部代码无法接触到类的私有部分。

缺点:

  1. 可见性需要改变时,需要修改每一处使用过该成员的地方;
  2. 无法访问之后在方法中添加的私有成员;
  3. 无法为私有成员创建自动化测试单元;
开源实战 | 基于SolidWorks与Matlab的并联索驱机器人轨迹规划全流程 本文详细介绍了基于SolidWorks与Matlab的并联索驱机器人轨迹规划全流程,涵盖从基础概念到实战技巧的各个环节。通过SolidWorks建模、Matlab运动学实现及轨迹优化策略,展示了如何实现高精度轨迹规划,适用于摄影、医疗等领域的机器人应用。 阅读详情

相关推荐

微信小程序音视频通话(for硬件)授权与设备注册实战指南

本文详细介绍了微信小程序音视频通话(for硬件)组件的开发实践,涵盖授权流程、设备注册与VoIP插件集成。重点解析了如何通过服务端获取snTicket实现用户授权,确保硬件设备与微信端的音视频通话安全可靠,适用于智能门禁、话机等物联网场景。

u6v7w8x的博客 945

Module的语法和加载实现

1.在es6之前,社区制定了一些模块加载方案,最主要的有CommonJS 和AMD两种。前者用于服务器,后者用于浏览器。es6在语言标准的层面,实现了模块功能,实现简单,完全可以取代CommomJS和AMD模块,成为浏览器与服务器通用的模块解决方案。 es6模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。CommomJS和AMD模块,都只在运行时确定这线东西...

Alisane的博客 367

【Flink cdc】Data row is smaller than a column index, internal schema representation is probably xxx

翻译一下:当scan.startup.mode=EARLIEST_OFFSET时,如果在最早的offset之后表结构有过变化就无法支持。原因应该是在binlog 的earliest_offset之后,表结构被修改过。我的解决方案:source配置中使用。mysql source配置使用。,以时间戳为消费依据。

integrity 2084

script标签之type=“module“

标签中的 JavaScript 代码是一个模块。浏览器会按照模块化的方式去加载和执行这段代码,包括解析依赖关系、异步加载等。模块具有自己的作用域,模块内部的变量和函数不会污染全局作用域,也不会受到其他模块的影响。标签时,会立即加载并执行其中的 JavaScript 代码。这意味着代码中的全局变量和函数都会污染全局作用域,可能导致命名冲突和变量覆盖等问题。加载 JavaScript 模块时,可能会遇到一些常见的报错。属性告诉浏览器,这个。:当浏览器遇到传统的。

m0_54070657的博客 6335

LEF文件介绍及其生成

介绍LEF文件及其生成方法

weixin_43249158的博客 3万+

2025最新聚合易支付官方完整版 – 全开源

2025聚合易支付5.0全开源版引领下一代智能支付革命,以"开放·智能·可信"为核心理念,成为全球首个通过量子安全认证的开源支付系统。该系统具备三大突破性创新:AI原生风控架构、跨链支付协议和零信任安全体系,支持百万级TPS处理能力。技术亮点包括Rust异步框架、Llama3风控模型、Polkadot跨链方案及IPFS分布式存储。提供量子安全支付、智能路由、元宇宙支付等六大功能,并通过开放原子基金会认证,构建了包含1200+全球开发者的开源生态。

meng1325200的博客 784

JavaScript <script> 标签属性讲解

<script> 元素 将 JavaScript 插入 HTML 的主要方法是使用 <Script> 元素。 属性: <script> 元素本身 // script 元素本身 在下载的时候会阻止其他页面的动作,比如下载资源或者等待其他脚本加载,只对外部脚本文件有效 <script src='script脚本位置.js'></script> async:表示立即开始下载脚本,但不能阻止其他页面的动作,比如下载资源或者等待其他脚本加载,只对外

qq_39275718的博客 1817

回归预测 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测

回归预测 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 2195

js的几种设计模式

js的设计模式

混世小妲己 1万+

【JTAG】1149.6协议详解

JTAG1149.6协议是1149.1协议中Boundary-Scan结构的扩展,1149.1对交流耦合、差分或两者兼有的情况并没有得到充分的处理。该协议支持新的I/O测试结构。需要时变(AC)信号的高级I/O引脚允许测试它们之间的连接,这包括所有差分信号引脚或单端信号引脚,通过设计支持交流耦合。..................

xuhe0206的博客 4572

勇攀数字高峰

摘要:该题目要求在数字地形图中寻找从最低点到最高点的所有严格递增登山路径。采用DFS深度优先搜索结合回溯算法,通过标记已访问位置并检查高度差限制(0<diff≤maxDiff)来遍历所有可能路径。算法首先确定起点(最低点)和终点(最高点),然后进行DFS搜索,每步移动需满足四个方向的合法移动且高度严格递增。最终输出符合条件的路径总数。提供了C++、Java和Python三种实现方案。

面试高手的博客 617

JavaScript之模块模式

使用 define 函数定义一个模块,可以指定该模块的依赖项和模块本身的工厂函数。

呼叫6945的博客 1359

巡检领域红外热成像相机镜头焦距选择方法总结

摘要:巡检机器人红外热成像相机镜头焦距的选择需综合考虑检测距离、视场角、目标分辨率等核心要素。短焦距(4-6mm)适用于室内近距离巡检,中焦距(12-19mm)适合变电站等中等距离场景,长焦距(25-50mm)则用于光伏板等远距离检测。选型需遵循焦距计算公式f=SL×d,确保目标占据≥3×3像元,同时考虑机器人安装空间、环境适应性及软件联动需求。建议通过样机实测或仿真软件验证选型合理性,以实现对设备故障的精准识别。

start_up_go的博客 297

《JavaScript设计模式》——9.2 Module(模块)模式

本节书摘来自异步社区《JavaScript设计模式》一书中的第9章,第9.2节, 作者: 【美】Addy Osmani 译者: 徐涛 更多章节内容可以访问云栖社区“异步社区”公众号查看。 9.2 Module(模块)模式 模块是任何强大应用程序架构中不可或缺的一部分,它通常能够帮助我们清晰地分离和组织项目中的代码单元。 在JavaScript中,有几种用...

weixin_33971130的博客 178

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

javascript设计模式之Module模块

模块是任何强大的应用程序架构不可或缺的一部分,它通常能够帮助我们清晰地分离和组织项目中的代码单元。 JavaScript实现模块模式 的几种方法:    (1)对象字面量表示法    (2)Module模式    (3)AMD模式    (4)CommonJS模块    (5)ECMAScript Harmony 1.对象字面量    示例: var myModule={

vuturn的专栏 1491

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

javascript设计模式【上】

参考《javascript设计模式》[美]Addy Osmani一书,下面介绍使用javascript经常会使用的主要设计模式。本博文是使用ES5语法的【上】篇,还有一个【下】篇,ES6语法会单独写个博客。 主要是以下几个设计模式: Constructor Pattern 构造模式 Module Pattern 模块化模式 Revealing Module Pattern 揭露模块化模式 Sin

前端-后端学习之路 2186

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

简单module_JavaScript 设计模式-Module(模块)模式

模块是任何强大应用程序架构中不可或缺的一部分,它通常能够帮助我们清晰的分离和组织项目中的代码单元。在JavaScript中,有几种用于实现模块的方法,包括:对象字面量表示法Module模块AMD模块CommonJS模块ECMAScript Harmony模块我们稍后将在本书第11章探索后三种方法。Module模式在某种程度上是基于对象字面量,因此首先重新认识对象字面量是有意义的。对象字面量在对象字...

weixin_32667955的博客 230

JavaScript学习总结(二)——Module模式(CommonJS)

文章目录一、 Module模式的基础1. 经典Module模式2.Revealing Module(揭示模块)模式3. Singleton(单例)模式二、Module模式的实现1.CommonJS模块1.1 NodeJS简介1.2 NodeJS中CommonJS的介绍1.2.1 Module对象1.2.2 require()函数的介绍1.2.3 CommonJS中模块的循环加载1.2.4 编写CommonJS模块2. ECMAScript 6中的模块2.1 基本语法2.2 ES6模块的特点2.2.1 ES6

new_start_2018的博客 2363

[JS设计模式] Module Pattern

这降低了在代码库的其他部分声明的命名冲突的风险,因为这些值在全局作用域中不可用。可以看到,math.js中的4个显示声明的函数可以导出,index.js中也能正常导入这四个函数,并正常调用。不必担心模块使用者会意外覆盖模块内部的变量的值,这些变量可能与模块的私有变量具有相同的名称:它可以。,可以在index.js中直接调用。仅仅将math.js中的函数export还不够,还需要在index.js中,将需要调用的函数导入。为了使index.js能调用到math.js中的函数,则需要先将这几个函数导出。

渔道的博客 1106

【Web前端】JavaScript设计模式全解析

JavaScript设计模式提供了解决常见开发问题的可复用方案,主要包括创建型、结构型和行为型三大类。创建型模式如单例模式确保唯一实例,工厂模式分离对象创建与使用;结构型模式如适配器解决接口兼容问题,装饰器动态扩展功能;行为型模式如观察者实现对象间通信,策略模式封装可变算法。JavaScript特有的模块模式利用闭包实现封装,混入模式支持多重继承。随着ES6引入类、Proxy等特性,传统模式实现更简洁,同时需注意避免过度设计,结合语言特性灵活运用。掌握这些模式能显著提升代码质量和可维护性。

宝青书坊 734

javascript设计模式-module(模块)模式

模块是任何强大应用程序中不可或缺的一部分,它通常能帮助我们清晰地分离和组织项目中的代码单元。js中实现模块的方法: 对象字面量表示法 Module模式 AMD模块 CommonJS模块 ECMAScript Harmony 模块 对象字面量对象字面量不需要使用new运算符进行实例化,但不能用在一个语句的开头,因为开始的可能被解读为一个块的开始,在对象的外部,新成员可以使用如下赋值语句添加到对象字面量

前端岚枫 1336

JS设计模式(一)-MODULE(模块模式)

JavaScript模块是用于保持代码块之间相互独立而普遍使用的设计模式。对于熟悉面向对象语言的人来说,模块是JavaScript的"类"。在JavaScript中Module模式模拟了类的概念,用闭包封装了"私有"状态和方法。 Module(模块)模式 通常能够帮助我们清晰地分离和组织项目中的代码单元 js中实现模块的方法 1》对象字面量表示法 2》Module模式 3》AMD模...

一个有理想的小人物 9583

Deep-Live-Cam 快速指南:一张照片,三步跑通实时换脸

直播开播前还有一小时,你想换个形象出现在镜头前。手里只有一张对方的正脸照,能做到吗?Deep-Live-Cam 做的事就是:拿这一张照片,实时替换摄像头或视频里的人脸,不用等离线渲染几个小时。 Deep-Live-Cam 是一款免费开源的实时换脸工具:给一张源人脸照片,它在摄像头画面或视频文件上逐帧替换面孔,Windows、macOS、Linux 都能跑。它不强制要求独立显卡,纯 CPU 也能运

gitblog_00553的博客 334

设计模式 - 模块模式

随着应用程序和代码库的增长,保持代码的可维护性和独立性变得越来越重要。模块模式允许您将代码拆分为更小的、可重用的部分。除了能够将代码拆分为更小的可重用部分外,模块还允许您将文件中的某些值保密。默认情况下,模块中的声明的作用域(封装)为该模块。如果我们不显式导出某个值,则该值在该模块之外不可用。这样可以降低在代码库的其他部分中声明的值发生名称冲突的风险,因为这些值在全局范围内不可用。

liangshanbo1215的博客 802

javascript设计模式 使用ES6语法

参考《javascript设计模式》[美]Addy Osmani一书,下面介绍使用javascript经常会使用的主要设计模式。本博文为ES6语法的博客,还有使用ES5语法的【上】【下】两篇。 主要是以下几个设计模式: Constructor Pattern 构造模式 Module Pattern 模块化模式 Revealing Module Pattern 揭露模块化模式 Singleton

前端-后端学习之路 6478
上一篇: 【Javascript设计模式】Constructor(构造器)模式
下一篇: 【javascript设计模式】3.Revealing Module(揭示)模式
蟹蟹蟹风流
蟹蟹蟹风流 优质创作者: 编程框架技术领域 优质创作者: 编程框架技术领域 领域专家: 前端开发技术领域 领域专家: 前端开发技术领域
博客等级 码龄11年 3万+粉丝 396原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蟹蟹蟹风流

期望和你分享一杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值