创建对象的几种方式
对象字面量
var person = {
name:"Nicholas",
age:29,
job:"Software Engineer",
sayName:function () {
alert(this.name);
}
}
上述代码创建了一个名为person的对象,并为它添加了三个属性(name、age、和job)和一个方法(sayName())。sayName()方法用于显示this.name的值,(这个值会被解析为person.name)
Object构造器
var person = new Object();
person.name = "Nicholas";
person.age = 29;
person.job = "SoftWare Engineer";
person.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("Nicholas",29,"softWare Engineer");
var person2 = createPerson("Greg",27,"Doctor");
工厂模式使用函数来封装以特定接口创建对象的细节。
但是没有解决对象识别的问题,即怎样知道一个对象的类型。
构造函数
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("Gerg",27,"Doctor");
与工厂模式相比:
1.没有显示地创建对象;
2.直接讲属性和方法赋值给了this对象;
3.没有return语句。
此外,要创建person的新实例,必须使用new操作符。相当于用这种方式调用了构造函数。
此外,还有原型模式,组合使用构造函数模式和原型模式,动态原型模式,寄生购造函数模式,稳妥购造函数模式等。暂且不表。