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 高階程式設計》 --