資源描述:
《javascript(JS)如何創(chuàng)建類和對(duì)象.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、Js如何創(chuàng)建類和對(duì)象使用預(yù)定義對(duì)象只是面向?qū)ο笳Z(yǔ)言的能力的一部分,它真正強(qiáng)大之處在于能夠創(chuàng)建自己專用的類和對(duì)象。ECMAScript擁有很多創(chuàng)建對(duì)象或類的方法。工廠方式原始的方式因?yàn)閷?duì)象的屬性可以在對(duì)象創(chuàng)建后動(dòng)態(tài)定義,所有許多開(kāi)發(fā)者都在JavaScript最初引入時(shí)編寫類似下面的代碼:varoCar=newObject;oCar.color="blue";oCar.doors=4;oCar.mpg=25;oCar.showColor=function(){alert(this.color);};???在上面的代碼中,創(chuàng)建對(duì)象car。然后給它設(shè)置幾個(gè)屬性:它的顏色是藍(lán)
2、色,有四個(gè)門,每加侖油可以跑25英里。最后一個(gè)屬性實(shí)際上是指向函數(shù)的指針,意味著該屬性是個(gè)方法。執(zhí)行這段代碼后,就可以使用對(duì)象car。不過(guò)這里有一個(gè)問(wèn)題,就是可能需要?jiǎng)?chuàng)建多個(gè)car的實(shí)例。解決方案:工廠方式要解決該問(wèn)題,開(kāi)發(fā)者創(chuàng)造了能創(chuàng)建并返回特定類型的對(duì)象的工廠函數(shù)(factoryfunction)。例如,函數(shù)createCar()可用于封裝前面列出的創(chuàng)建car對(duì)象的操作:functioncreateCar(){varoTempCar=newObject;oTempCar.color="blue";oTempCar.doors=4;oTempCar.mpg=25;
3、oTempCar.showColor=function(){alert(this.color);};returnoTempCar;}varoCar1=createCar();varoCar2=createCar();???在這里,第一個(gè)例子中的所有代碼都包含在createCar()函數(shù)中。此外,還有一行額外的代碼,返回car對(duì)象(oTempCar)作為函數(shù)值。調(diào)用此函數(shù),將創(chuàng)建新對(duì)象,并賦予它所有必要的屬性,復(fù)制出一個(gè)我們?cè)谇懊嬲f(shuō)明過(guò)的car對(duì)象。因此,通過(guò)這種方法,我們可以很容易地創(chuàng)建car對(duì)象的兩個(gè)版本(oCar1和oCar2),它們的屬性完全一樣。為函數(shù)傳遞參
4、數(shù)我們還可以修改createCar()函數(shù),給它傳遞各個(gè)屬性的默認(rèn)值,而不是簡(jiǎn)單地賦予屬性默認(rèn)值:functioncreateCar(sColor,iDoors,iMpg){varoTempCar=newObject;oTempCar.color=sColor;oTempCar.doors=iDoors;oTempCar.mpg=iMpg;oTempCar.showColor=function(){alert(this.color);};returnoTempCar;}varoCar1=createCar("red",4,23);varoCar2=createCar
5、("blue",3,25);oCar1.showColor();//輸出"red"oCar2.showColor();//輸出"blue"???給createCar()函數(shù)加上參數(shù),即可為要?jiǎng)?chuàng)建的car對(duì)象的color、doors和mpg屬性賦值。這使兩個(gè)對(duì)象具有相同的屬性,卻有不同的屬性值。在工廠函數(shù)外定義對(duì)象的方法雖然ECMAScript越來(lái)越正式化,但創(chuàng)建對(duì)象的方法卻被置之不理,且其規(guī)范化至今還遭人反對(duì)。一部分是語(yǔ)義上的原因(它看起來(lái)不像使用帶有構(gòu)造函數(shù)new運(yùn)算符那么正規(guī)),一部分是功能上的原因。功能原因在于用這種方式必須創(chuàng)建對(duì)象的方法。前面的例子中,每次調(diào)
6、用函數(shù)createCar(),都要?jiǎng)?chuàng)建新函數(shù)showColor(),意味著每個(gè)對(duì)象都有自己的showColor()版本。而事實(shí)上,每個(gè)對(duì)象都共享同一個(gè)函數(shù)。有些開(kāi)發(fā)者在工廠函數(shù)外定義對(duì)象的方法,然后通過(guò)屬性指向該方法,從而避免這個(gè)問(wèn)題:functionshowColor(){alert(this.color);}functioncreateCar(sColor,iDoors,iMpg){varoTempCar=newObject;oTempCar.color=sColor;oTempCar.doors=iDoors;oTempCar.mpg=iMpg;oTempCa
7、r.showColor=showColor;returnoTempCar;}varoCar1=createCar("red",4,23);varoCar2=createCar("blue",3,25);oCar1.showColor();//輸出"red"oCar2.showColor();//輸出"blue"?在上面這段重寫的代碼中,在函數(shù)createCar()之前定義了函數(shù)showColor()。在createCar()內(nèi)部,賦予對(duì)象一個(gè)指向已經(jīng)存在的showColor()函數(shù)的指針。從功能上講,這樣解決了重復(fù)創(chuàng)建函數(shù)對(duì)象的問(wèn)題;但是從語(yǔ)義上講,該函數(shù)不太像