1、工厂方式
function createCar(){
var oTempCar=new Object;
oTempCar.color="Red";
oTempCar.doors=4;
oTempCar.showColor=function(){ alert(this.color);};
return oTempCar;
}
var oCar1=createCar();
缺点:1)语义上不像使用带有构造函数的new运算符那么正规;
2)每次调用createCar(),都要创建新函数showColor(),每个对象都有自己的showColor()版本;
2、构造函数方式
function Car(sColor,iDoors){
this.color=sColor;
this.doors=iDoors;
this.showColor=function(){alert(this.color;)};
}
var oCar1=new Car("Red",4);
缺点:1)重复生产函数,每个对象都创建独立的函数版本;
3、原型方式
function Car(){}
Car.prototype.color="Red";
Car.prototype.doors=4;
Car.prototype.drivers=new Array("Mike","Sue");
Car.prototype.showColor=function(){alert(this.color);};
var oCar1=new Car();
缺点:1)属性drivers是指向Array对象的指针,Car的每个实例都指向同一个数组;
优点:1)可以使用instanceof运算符检查给定变量指向的对象的类型,alert(oCar1 instanceOf Car); //"true"
4、混合的构造函数/原型方式
function Car(sColor,iDoors){
this.color=sColor;
this.doors=iDoors;
this.drivers=new Array("Mike","Sue");
}
Car.prototype.showColor=function(){alert(this.color);};
var oCar1=new Car("Red",4);
5、动态原型方法
function Car(sColor,iDoors){
this.color=sColor;
this.doors=iDoors;
this.drivers=new Array("Mike","Sue");
if(typeof Car._initialized=="undefined"){
Car.prototype.showColor=function(){alert(this.color);};
Car._initialized=true;
}
}
优点:1)语义上更新Java其他语言中的类定义;
-- 摘抄于《 JavaScript 高级程序设计》 --