1. 工厂模式
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 Enginner");
var person2 = createPerson("Greg",27,"Doctor");
工厂模式抽象了创建具体对象的过程。用函数来封装以特定接口创建对象的细节。 缺点:函数createPerson()可以根据接受的参数创建一个包含所有必要信息的Person对象。可以无数次调用这个函数,而每次都会返回一个包含三个属性一个方法的对象。工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题(怎么知道一个对象的类型)。
2. 构造函数模式
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.sayName = function(){
console.log(this.name);
}
}
var person1 = new Person("Nicholas",29,"Software ENginner");
要创建Person的新实例,必须使用new操作符,以这种方式调用构造函数会经历以下4个步骤: (1)创建一个新对象; (2)将构造函数的作用域赋给新对象(因此this指向了这个新对象); (3)执行构造函数中的代码(为这个新对象添加属性); (4)返回新对象。