国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

javascript設(shè)計模式之工廠模式示例講解

2024-05-06 16:02:02
字體:
供稿:網(wǎng)友
這篇文章主要介紹了javascript設(shè)計模式中的工廠模式示例講解,需要的朋友可以參考下

javaScript工廠方式原始的方式

因?yàn)閷ο蟮膶傩钥梢栽趯ο髣?chuàng)建后動態(tài)定義,這在 JavaScript 最初引入時都會編寫類似下面的代碼

復(fù)制代碼 代碼如下:


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

在上面的代碼中,創(chuàng)建對象 car。然后給它設(shè)置幾個屬性:它的顏色是藍(lán)色,有四個門,每加侖油可以跑 25 英里。最后一個屬性實(shí)際上是指向函數(shù)的指針,意味著該屬性是個方法。執(zhí)行這段代碼后,就可以使用對象 car。不過這里有一個問題,就是可能需要創(chuàng)建多個 car 的實(shí)例,這顯然不是很好的方式。

解決方案:工廠方法
要解決該問題,開發(fā)者創(chuàng)造了能創(chuàng)建并返回特定類型的對象的工廠函數(shù)。例如,函數(shù) createCar() 可用于封裝前面列出的創(chuàng)建 car 對象的操作:

復(fù)制代碼 代碼如下:


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"

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

在工廠函數(shù)外定義對象的方法
有些開發(fā)者在工廠函數(shù)外定義對象的方法,然后通過屬性指向該方法,從而避免這個問題:

復(fù)制代碼 代碼如下:


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"

在上面這段重寫的代碼中,在函數(shù) createCar() 之前定義了函數(shù) showColor()。在 createCar() 內(nèi)部,賦予對象一個指向已經(jīng)存在的 showColor() 函數(shù)的指針。從功能上講,這樣解決了重復(fù)創(chuàng)建函數(shù)對象的問題;但是從語義上講,該函數(shù)不太像是對象的方法。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 南昌市| 大邑县| 黄浦区| 青神县| 遵义县| 崇文区| 望谟县| 濉溪县| 霍林郭勒市| 文山县| 义马市| 扶沟县| 宝兴县| 石首市| 西贡区| 乳山市| 浦城县| 锦屏县| 宁国市| 襄樊市| 芮城县| 临猗县| 新野县| 保定市| 湖南省| 洱源县| 客服| 伊通| 乌拉特前旗| 静海县| 凯里市| 冀州市| 碌曲县| 抚顺市| 山西省| 阜康市| 建始县| 阳曲县| 镇赉县| 土默特右旗| 阿图什市|