回顾前面我们谈到通过object构造函数创建单个对象
// 创建一个object的实例,然后再为它添加属性和方法
var person = new Object();
person.name = "jill";
person.age = 18;
person.job = "software Engineer";
person.sayName = function () {
alert(this.name);
}
通过对象字面量创建单个对象
var person = {
name:"jill",
age:18,
job:"software Engineer",
sayName:function () {
alert(this.name);
}
}
通过object构造函数或对象字面量创建单个对象的方式有个缺点:使用同一个接口创建很多对象,会产生大量的重复代码
###工厂模式 解决了创建多个相似对象的问题
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('jill',18,'software');
var person2 = createPerson('vane',23,'student');
工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题(即怎样知道一个对象的类型)
###构造函数模式 解决了对象识别的问题,可用来创建特定类型的对象
与工厂模式不同之处:没有显式的创建对象,直接将属性和方法赋给了this对象,没有return语句;创建自定义的构造函数意味着将来可以将它的实例标识为一种特定的类型
function Person(name,age,job) {
this.name = name;
this.age = age;
this.job = job;
this.sayName = function () {
alert(this.name);
}
}
//创建一个新对象-》将构造函数的作用域赋给新对象-》执行构造函数中的代码-