Javascript 定義類或物件

chenyizh發表於2014-03-09

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

 

 

 

 

 

 

 

相關文章