1、
工厂方式:创建能创建并返回特定类型的工厂函数creator:
如:
function createCar(sColor,iDoors,iMpg){
var oTempCar = new Object();
oTmepCar.color = sColor;
oTmepCar.doors= iDoors;
oTmepCar.mpg= iMpg;
oTmepCar.showColor = funtion (){
alert (this.color);
};
return oTempCar;
}
var oCar1 = createCar('red',4,23);
var oCar1 = createCar('blue',3,25);
oCar1.showColor();
oCar2.showColor();
2、
构造函数方式:创建一个构造函数(构造函数的首字母大写)
如:
function Car(sColor,iDoors,iMpg){
this.color = sColor;
this.doors= iDoors;
this.mpg= iMpg;
this.showColor = function (){
alert(this.color);
}
}
var oCar1 = new Car('red',3,25);
var oCar2 = new Car('blue',5,25);
注:以上两种方式在创建对象时,对于可以共享的showColor()方法均进行了创建,也即有多少个对象便创建了多少个方法;
3、
原型方式:该方式利用了对象的prototype属性,可以把它看成是创建新对象所依赖的原型。这种可以削除了上述不足,但是它只能在对象创建完成之后才能更改对象的属性,并且由于所创建的对象中的属性对于对象的引用,使得改变其中一个由对象创建的属性,其它的由此方法创建的对象的属性也会发生改变。如下例中的drivers,是Array对象的引用,所以当oCar1的drivers改变时,oCar2的drivers也会发生改变;
如:
function Car(){}
Car.prototype.color = 'red';
Car.prototype.doors = '4';
Car.prototype.mpg = '25';
Car.prototype.drivers = new Array('a','b');
Car.prototype.showColor = function (){
alert(this.color);
};
var oCar1 = new Car();
var oCar2 = new Car();
4、
混合的构造函数/原型方式:该方法结合了构造函数和原型方式的优点;
如:
function Car(sColor,iDoors,iMpg){
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.drivers = new Array('a','b');
}
Car.prototype.showColor = function (){
alert(this.color);
}
var oCar1 = new Car('red',3,25);
var oCar2 = new Car('blue',5,25);
5、
动态原型方法(推荐方法):该方法通过检测对象否已经被创建决定是否创建相应函数。
如:
function Car(sColor,iDoors,iMpg){
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.drivers = new Array('a','b');
if(typeof Car._initialized == "undefined"){
Car.prototype.showColor = function (){
alert(this.color);
}
Car._initialized = true;
}
}