1.工厂模式
使用一个带参数的函数来构造对象。这样解决了创建多个相似对象的问题,但没有解决对象识别的问题。即不知道preson1是什么类型的对象。
function createPerson(name,age,job)
{
var o=new Object();
o.name=name;
o.age=age;
o.job=job;
o.sayName=funtion(){
alert(this.name);
};
return o;
}
var person1=createPerson("a",15,"teacher");
var person2=createPerson("b",25,"student");
2.构造函数模式
像Object和Array一样,在new的时候会自动调用它的构造函数,所以一定有一种方法可以同时指定对象类型以及构造对象。
function Person(name,age,job){
this.name=name;
this.age=age;
this.job=job;
this.sayName=function(){
alert(this.name);
}
}
var person1=new Person("a",18,"teacher");
alert(person1 instanceof Object);//true
alert(person1 instanceof Person);//true
在使用new和构造函数创建对象的过程中,实际上有以下几个步骤
1.在堆上申请一块内存,创建一个对象
2.把对象的作用域赋给构造函数
3.执行构造函数
4.返回这个对象
构造函数模式的缺点:不同实例无法共享一个函数或属性,浪费空间。
3.原型模式
每个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,这个对象包含所有创建的实例可以共享的属性和方法。
即,prototype指向原型对象。
因此,可以采用这样的混合构造模式。
function Person(name,age,job)
{
this.name=name;
this.age=age;
this.job=job;
}
Person.Prototype={
SayName:function(){
alert(this.name);
}
}
var person1=new Person("a",25,"teacher")