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

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

目录

前言

1.Constructor构造器模式

1.1基础Constructor构造器模式

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

2. Module 模块模式

2.1对象字面量

2.2 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 内容请搜索易知道(ezd.cc)以前的文章或继续浏览下面的相关文章希望大家以后多多支持易知道(ezd.cc)!

推荐阅读

    Javascript中 toFixed四舍六入方法

    Javascript中 toFixed四舍六入方法,浮点,手动,银行家,进,javascript中toFixed使用的是银行家舍入规则。银行家舍入:所谓银行家舍入法,其实

    Win10怎么禁用hkcmd module?

    Win10怎么禁用hkcmd module?,hkcmd,module,hkcmd module 启动项是什么?win10可以禁用hkcmd module吗?在windows 10操作系统中每次开机都会自

    javascript怎么隐藏元素值

    javascript怎么隐藏元素值,隐藏,元素,设置,显示,位置,属性,javascript隐藏元素值的方法:1、设置元素style属性中的display,语句如“t.style.displ

    javascript对象怎么转换成字符串

    javascript对象怎么转换成字符串,字符串,参数,对象,序列化,属性,数组,在javascript中可以使用“JSON.stringify()”方法将对象转换成字符串,其语

    javascript怎么将字母转为小写

    javascript怎么将字母转为小写,方法,字符串,函数,语法,主机,语言,javascript字母转为小写的方法:1、使用toLowerCase()函数,语法“string.toLower

    javascript怎么实现二维码

    javascript怎么实现二维码,二维码,二维码生成,下载,插件,扫描二维码,操作,javascript实现二维码的方法:1、下载qrcodejs插件;2、使用qrcode实现二

    javascript如何获取字符串长度

    javascript如何获取字符串长度,字符,获取,属性,字符串长度,字符串,输出,javascript获取字符串长度的方法:1、使用length属性按字符来获取字符串

    javascript怎么类型转换

    javascript怎么类型转换,方法,字符串,转换,转换成,类型,数字,方法:1、使用“+”运算符自动进行转换。2、使用JS内置的函数进行转换,例toString()

    javascript如何去掉空格

    javascript如何去掉空格,去除,替换,方法,删除,文本,字符串,javascript去掉空格的方法:1、通过“str.replace(/\s+/g,"");”去除所有空格;2、通

    javascript中定义数组的方法有哪些

    javascript中定义数组的方法有哪些,数组,数组名,列表,元素,语句,方法,javascript中定义数组的方法:1、使用“var 数组名=[值列表]”语句;2、使用