JavaScript寫類方式(一)——工廠方式

來源:互聯網
上載者:User
原始的方式

因為對象的屬性可以在對象建立後動態定義,這在 JavaScript 最初引入時都會編寫類似下面的代碼:

var oCar = new Object;oCar.color = "blue";oCar.doors = 4;oCar.mpg = 25;oCar.showColor = function() {  alert(this.color);};

在上面的代碼中,建立對象 car。然後給它設定幾個屬性:它的顏色是藍色,有四個門,每加侖油可以跑 25 英裡。最後一個屬性實際上是指向函數的指標,意味著該屬性是個方法。執行這段代碼後,就可以使用對象 car。不過這裡有一個問題,就是可能需要建立多個 car 的執行個體,這顯然不是很好的方式。

解決方案:Factory 方法

要解決該問題,開發人員創造了能建立並返回特定類型的對象的工廠函數。例如,函數 createCar() 可用於封裝前面列出的建立 car 對象的操作:

function createCar(sColor,iDoors,iMpg) {  var oTempCar = new Object;  oTempCar.color = sColor;  oTempCar.doors = iDoors;  oTempCar.mpg = iMpg;  oTempCar.showColor = function() {    alert(this.color);  };  return oTempCar;}var oCar1 = createCar("red",4,23);var oCar2 = createCar("blue",3,25);oCar1.showColor();        //輸出 "red"oCar2.showColor();        //輸出 "blue"

調用此工廠函數,將建立新對象,並賦予它所有必要的屬性,給 createCar() 函數加上參數,即可為要建立的 car 對象的 color、doors 和 mpg 屬性賦值。這使兩個對象具有相同的屬性,卻有不同的屬性值。該方法有個不好的地方在於每建立一個car對象(即調用一次createCar函數)都會重複的為每個對象建立showColor 方法,而這時沒有必要的而事實上,每個對象都共用同一個函數。於是我們嘗試在函數之外去聲明其方法屬性。

在工廠函數外定義對象的方法

有些開發人員在工廠函數外定義對象的方法,然後通過屬性指向該方法,從而避免這個問題:

function showColor() {  alert(this.color);}function createCar(sColor,iDoors,iMpg) {  var oTempCar = new Object;  oTempCar.color = sColor;  oTempCar.doors = iDoors;  oTempCar.mpg = iMpg;  oTempCar.showColor = showColor;  return oTempCar;}var oCar1 = createCar("red",4,23);var oCar2 = createCar("blue",3,25);oCar1.showColor();        //輸出 "red"oCar2.showColor();        //輸出 "blue"

在上面這段重寫的代碼中,在函數 createCar() 之前定義了函數 showColor()。在 createCar() 內部,賦予對象一個指向已經存在的 showColor() 函數的指標。從功能上講,這樣解決了重複建立函數對象的問題;但是從語義上講,該函數不太像是對象的方法。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.