我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Javascript Constructor构造器模式与Module模块模式

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Javascript Constructor构造器模式与Module模块模式

前言

首先我们要知道:什么是模式?

模式,就是专门为某些常见问题开发的、优秀的解决方案。它通常经过一系列实践证明、针对某类问题具有可重用性的解决方案。 而设计模式,不同于编程模式,其与具体的语言无关。

1.Constructor构造器模式

1.1基础Constructor构造器模式

// 使用函数来模拟一个Car类
function Car(model,year,miles) {
	this.model = model ;
	this.year = year;
	this.miles = miles;

	this.toString = function () {
		return this.model + "已经行驶了" + this.miles + "米";
	}
}

//调用
var honda = new Car("东风Honda",2009,20000);//实例化Car

//输出结果
console.log(honda.toString());

缺陷:

  • 继承困难;
  • toString()是为每个使用Car构造器创建的新对象而分别重新定义的。这样不理想,因为这种函数应该在所有的Car类实力之间共享。

1.2进阶 带原型的Constructor构造器模型

function Car(model,year,miles) {
	this.model = model ;
	this.year = year;
	this.miles = miles;

	//每个对象都有构造器原型的所有属性。
	Car.prototype.toString = function() {
		return this.model + "已经行驶了" + this.miles + "米";
	}
}
//调用
var honda = new Car("东风Honda",2009,20000);//实例化Car
console.log(honda.toString());

优点:

  • toString()的单一实例能够在所有的Car对象之间共享。

2. Module 模块模式

模块能帮助我们清晰分离和组织项目中的代码单元。

在js中有几种实现模块的方法:

  • 对象字面量表示法;
  • Module模式
  • AMD模块
  • CommonJs模块
  • ES Harmony模块

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

2.1对象字面量

示例:

<script type="text/javascript">
    const myObjectLiteral = {
        varibaleKey : varibaleValue,
        function: function () {
                //实现
        }
    };
</script>

注意 :

  • 对象字面量不需要使用 new 实例化;
  • 不能用在一个语句的开头,否则可能会被解释为一个块的开始;

2.2 Module(模块)模式

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

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

一个关于购物车的例子:

<script type="text/javascript">
	const basketModule = (function() {
		//私有
		let 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() {
				let 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>

优点:

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

缺点:

  • 可见性需要改变时,需要修改每一处使用过该成员的地方;
  • 无法访问之后在方法中添加的私有成员;
  • 无法为私有成员创建自动化测试单元;

到此这篇关于Javascript  Constructor构造器模式与Module模块模式的文章就介绍到这了,更多相关Javascript  Constructor 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Javascript Constructor构造器模式与Module模块模式

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Go1.18多模块Multi-Module工作区模式是什么

本文小编为大家详细介绍“Go1.18多模块Multi-Module工作区模式是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Go1.18多模块Multi-Module工作区模式是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入
2023-06-29

PHP结构型模式之装饰器模式

这篇文章主要介绍了PHP结构型模式之装饰器模式,装饰器模式是一种结构型模式,它允许你在运行时为一个对象动态地添加新的行为,而不影响其原始的行为。这种类型的设计模式属于结构型模式,它结合了透明性和多样性
2023-05-15

MVC模式与三层架构

这篇文章主要让我们理解JSP及其原理,学会使用EL表达式和JSTL标签,理解MVC模式和三层架构的基础知识,有兴趣的同学可以阅读,借鉴参考一下
2023-03-21

PyTorch使用torch.nn.Module模块自定义模型结构方式

PyTorch中的torch.nn.Module模块是自定义神经网络模型的有力工具。继承自该模块的Python类可定义模型结构,包括层和连接。使用优化器和损失函数训练模型,并在验证或测试集上评估其性能。Module的优点包括自动梯度计算、参数管理、模块化设计和与PyTorch生态系统的集成。可扩展性允许添加或修改层,创建各种复杂模型。
PyTorch使用torch.nn.Module模块自定义模型结构方式
2024-04-02

编程热搜

目录