一、工厂模式
工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程(本书后
面还将讨论其他设计模式及其在 JavaScript 中的实现)。考虑到在 ECMAScript 中无法创建类,开发人员
就发明了一种函数,用函数来封装以特定接口创建对象的细节,如下面的例子所示。
- function createPerson(name, age, job){
- var o = new Object();
- o.name = name;
- o.age = age;
- o.job = job;
- o.sayName = function(){
- alert(this.name);
- };
- return o;
- }
- var person1 = createPerson("Nicholas", 29, "Software Engineer");
- var person2 = createPerson("Greg", 27, "Doctor");
函数 createPerson() 能够根据接受的参数来构建一个包含所有必要信息的 Person 对象。可以无
数次地调用这个函数,而每次它都会返回一个包含三个属性一个方法的对象。工厂模式虽然解决了创建
多个相似对象的问题,但却没有解决对象识别的问题(即怎样知道一个对象的类型)。随着 JavaScript
的发展,又一个新模式出现了。
二、构造函数模式
像 Object 和 Array 这样
的原生构造函数,在运行时会自动出现在执行环境中。此外,也可以创建自定义的构造函数,从而定义
自定义对象类型的属性和方法。例如,可以使用构造函数模式将前面的例子重写如下。
- function Person(name, age, job){
- this.name = name;
- this.age = age;
- this.job = job;
- this.sayName = function(){
- alert(this.name);
- };
- }
- var person1 = new Person("Nicholas", 29, "Software Engineer");
- var person2 = new Person("Greg", 27, "Doctor");
在这个例子中,Person() 函数取代了 createPerson() 函数。我们注意到,Person() 中的代码
除了与 createPerson() 中相同的部分外,还存在以下不同之处:
. 没有显式地创建对象;
. 直接将属性和方法赋给了 this 对象;
. 没有 return 语句。
来源: