- 相關(guān)推薦
javaScript工廠(chǎng)方式原始的方式
因為對象的屬性可以在對象創(chuàng )建后動(dòng)態(tài)定義,這在 JavaScript 最初引入時(shí)都會(huì )編寫(xiě)類(lèi)似下面的代碼
復制代碼 代碼如下:
var oCar = new Object;
oCar.color = "blue";
oCar.doors = 4;
oCar.mpg = 25;
oCar.showColor = function() {
alert(this.color);
};
在上面的代碼中,創(chuàng )建對象 car。然后給它設置幾個(gè)屬性:它的顏色是藍色,有四個(gè)門(mén),每加侖油可以跑 25 英里。最后一個(gè)屬性實(shí)際上是指向函數的指針,意味著(zhù)該屬性是個(gè)方法。執行這段代碼后,就可以使用對象 car。不過(guò)這里有一個(gè)問(wèn)題,就是可能需要創(chuàng )建多個(gè) car 的實(shí)例,這顯然不是很好的方式。
解決方案:工廠(chǎng)方法
要解決該問(wèn)題,開(kāi)發(fā)者創(chuàng )造了能創(chuàng )建并返回特定類(lèi)型的對象的工廠(chǎng)函數。例如,函數 createCar() 可用于封裝前面列出的創(chuàng )建 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"
調用此工廠(chǎng)函數,將創(chuàng )建新對象,并賦予它所有必要的屬性,給 createCar() 函數加上參數,即可為要創(chuàng )建的 car 對象的 color、doors 和 mpg 屬性賦值。這使兩個(gè)對象具有相同的屬性,卻有不同的屬性值。該方法有個(gè)不好的地方在于每創(chuàng )建一個(gè)car對象(即調用一次createCar函數)都會(huì )重復的為每個(gè)對象創(chuàng )建showColor 方法,而這時(shí)沒(méi)有必要的而事實(shí)上,每個(gè)對象都共享同一個(gè)函數。于是我們嘗試在函數之外去聲明其方法屬性。
在工廠(chǎng)函數外定義對象的方法
有些開(kāi)發(fā)者在工廠(chǎng)函數外定義對象的方法,然后通過(guò)屬性指向該方法,從而避免這個(gè)問(wèn)題:
復制代碼 代碼如下:
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"
在上面這段重寫(xiě)的代碼中,在函數 createCar() 之前定義了函數 showColor()。在 createCar() 內部,賦予對象一個(gè)指向已經(jīng)存在的 showColor() 函數的指針。從功能上講,這樣解決了重復創(chuàng )建函數對象的問(wèn)題;但是從語(yǔ)義上講,該函數不太像是對象的方法。
【javaScript工廠(chǎng)方式原始的方式】相關(guān)文章:
正確的洗發(fā)方式06-17
孩子慢跑的方式06-26
員工激勵的方式10-14
回憶營(yíng)銷(xiāo)的方式05-23
演講與口才方式07-28
高空跳傘的方式10-16
兔子的飼養方式06-27
化妝的正確方式07-30
日本留學(xué)方式08-29