虽然Object构造函数或对象字面量都可以用来创建单个对象,但这些方式有个明显的缺点:使用同一个接口创建很多对象,会产生大量的重复代码
为解决这个问题,人们开始使用工厂模式
工厂模式
工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程
考虑到ECMAScript中无法创建类,开发人员就发明了一种函数,用函数来封装以待定接口创建对象的细节
1 | function createPerson(name, age, job) { |
工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题(即怎样知道一个对象的类型)
构造函数模式
ECMAScript中的构造函数可用来创建特定类型的对象,也可以创建自定义的构造函数,也可以创建自定义的构造函数,从而定义自定义对象类型的属性和方法
1 | function Person(name, age, job) { |
与createPerson()函数的不同之处:
- 没有显式的创建对象
- 直接将属性和方法赋值给了this对象
- 没有return语句
按照惯例构造函数都应该以一个大写字母开头,而非构造函数则应该以一个小写字母开头
创建Person的新实例,必须使用new操作符
以这种方式调用构造函数实际上会经历一下四个步骤:
- 创建一个新对象
- 将构造函数的作用域赋给新对象(因此this就指向了这个新对象)
- 执行构造函数中的代码(为这个新对象添加属性)
- 返回新对象