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

 更新时间:2022年08月25日 15:09:16   作者:前端修罗场​​​​​​​  
这篇文章主要介绍了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 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • javascript十六进制数字和ASCII字符之间的转换方法

    javascript十六进制数字和ASCII字符之间的转换方法

    下面小编就为大家带来一篇javascript十六进制数字和ASCII字符之间的转换方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • Javascript中的包装类型介绍

    Javascript中的包装类型介绍

    这篇文章主要介绍了Javascript中的包装类型介绍,包装类型是指在执行代码的一瞬间把数据包装成引用类型,本文讲解的就是这个小知识,需要的朋友可以参考下
    2015-04-04
  • uin-app+mockjs实现本地数据模拟

    uin-app+mockjs实现本地数据模拟

    这篇文章主要为大家详细介绍了uin-app+mockjs实现本地数据模拟,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • uniapp小程序之配置首页搜索框功能的实现

    uniapp小程序之配置首页搜索框功能的实现

    这篇文章主要介绍了uniapp小程序之配置首页搜索框,我们介绍一下本次开发使用的是uniapp,本次分享内容的搜索框为禁止输入搜索框,点击跳转专属搜索页面,需要的朋友可以参考下
    2022-09-09
  • Javascript中Eval函数的使用说明

    Javascript中Eval函数的使用说明

    JavaScript有许多小窍门来使编程更加容易。 其中之一就是eval()函数,这个函数可以把一个字符串当作一个JavaScript表达式一样去执行它。
    2008-10-10
  • elemetUi 组件--el-upload实现上传Excel文件的实例

    elemetUi 组件--el-upload实现上传Excel文件的实例

    这篇文章主要介绍了elemetUi 组件--el-upload实现上传Excel文件的实例的相关资料,希望通过本文大家能够实现这样的功能,需要的朋友可以参考下
    2017-10-10
  • 如何在微信小程序中实现Mixins方案

    如何在微信小程序中实现Mixins方案

    这篇文章主要给大家介绍了关于如何在微信小程序中实现Mixins方案的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用微信小程序具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • js扁平数组和树结构相互转换处理方法

    js扁平数组和树结构相互转换处理方法

    这篇文章主要给大家介绍了关于js扁平数组和树结构相互转换处理方法的相关资料,之前面试有遇到过这个问题,面试官问如何把一个数组数据扁平,然后转化为Tree结构数据,工作中刚好也用到了,所以总结下,需要的朋友可以参考下
    2023-07-07
  • 一文入门Webpack文件指纹

    一文入门Webpack文件指纹

    文件指纹是文件打包后输出的文件名的后缀,通常用来做一些文件的版本管理,文中给大家提到了几种文件指纹的设置用法,对Webpack文件指纹相关知识感兴趣的朋友一起看看吧
    2022-02-02
  • webpack4从0搭建组件库的实现

    webpack4从0搭建组件库的实现

    这篇文章主要介绍了webpack4从0搭建组件库的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11

最新评论