Javascript|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); //实例化Carconsole.log(honda.toString());
优点:
- toString()的单一实例能够在所有的Car对象之间共享。
2. Module 模块模式 【Javascript|Javascript Constructor构造器模式与Module模块模式】模块能帮助我们清晰分离和组织项目中的代码单元。
在js中有几种实现模块的方法:
- 对象字面量表示法;
- Module模式
- AMD模块
- CommonJs模块
- ES Harmony模块
2.1对象字面量
示例:
注意 :
- 对象字面量不需要使用 new 实例化;
- 不能用在一个语句的开头,否则可能会被解释为一个块的开始;
2.2 Module(模块)模式
JS中,Module模式用于进一步模拟类的概念。它能够使一个单独的对象拥有公有、私有方法和变量,从而屏蔽来自 全局作用域的特殊部分。进而降低了与其他脚本冲突的可能性。
其中,私有部分,主要利用了“闭包”。由于闭包的存在,声明的变量和方法只能在该模式内部可用。但在返回对象上 定义的变量和方法,外部使用者是能够调用的。
一个关于购物车的例子:
优点:
- 整洁;
- 支持私有数据。在 Module 模式中,代码的公有部分能够接触到私有部分,而外部代码无法接触到类的私有部分。
- 可见性需要改变时,需要修改每一处使用过该成员的地方;
- 无法访问之后在方法中添加的私有成员;
- 无法为私有成员创建自动化测试单元;
推荐阅读
- 《交互设计精髓》笔记|《交互设计精髓》笔记 第三章 理解目标 构造人物模型
- javascript动态分页的实现方法实例
- JavaScript正则验证密码强弱度的实现方法
- #|牛客刷题——前端面试【二】谈一谈JavaScript面向对象
- #|通过JavaScript、css、H5 实现简单的tab栏的切换和复用
- #|通过JavaScript 实现简单的全选、不全选的思想
- Javascript设计模式
- javascript|this相关问题
- JavaScript基础回顾知识点记录6-操作元素样式和事件对象(介绍基本使用)
- 深入理解JavaScript-Object(对象)