javascript原型prototype

javascript原型prototype

ID:11075805

大小:91.00 KB

頁數(shù):10頁

時(shí)間:2018-07-09

javascript原型prototype_第1頁
javascript原型prototype_第2頁
javascript原型prototype_第3頁
javascript原型prototype_第4頁
javascript原型prototype_第5頁
資源描述:

《javascript原型prototype》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫

1、初看原型prototype源自法語,軟件界的標(biāo)準(zhǔn)翻譯為“原型”,代表事物的初始形態(tài),也含有模型和樣板的意義。JavaScript中的prototype概念恰如其分地反映了這個(gè)詞的內(nèi)含,我們不能將其理解為C++的prototype那種預(yù)先聲明的概念。JavaScript的所有function類型的對象都有一個(gè)prototype屬性。這個(gè)prototype屬性本身又是一個(gè)object類型的對象,因此我們也可以給這個(gè)prototype對象添加任意的屬性和方法。既然prototype是對象的“原型”,那么由該函數(shù)構(gòu)造出來的對象應(yīng)該都會(huì)具有這個(gè)“原型”的特性。事實(shí)上,在構(gòu)造函數(shù)的prototype上

2、定義的所有屬性和方法,都是可以通過其構(gòu)造的對象直接訪問和調(diào)用的。也可以這么說,prototype提供了一群同類對象共享屬性和方法的機(jī)制。我們先來看看下面的代碼:functionPerson(name){this.name=name;//設(shè)置對象屬性,每個(gè)對象各自一份屬性數(shù)據(jù)};//給Person函數(shù)的prototype添加SayHello方法。Person.prototype.SayHello=function(){alert("Hello,I'm"+this.name);}varBillGates=newPerson("BillGates");//創(chuàng)建BillGates對象varStev

3、eJobs=newPerson("SteveJobs");//創(chuàng)建SteveJobs對象BillGates.SayHello();//通過BillGates對象直接調(diào)用到SayHello方法SteveJobs.SayHello();//通過SteveJobs對象直接調(diào)用到SayHello方法alert(BillGates.SayHello==SteveJobs.SayHello);//因?yàn)閮蓚€(gè)對象是共享prototype的SayHello,所以顯示:true程序運(yùn)行的結(jié)果表明,構(gòu)造函數(shù)的prototype上定義的方法確實(shí)可以通過對象直接調(diào)用到,而且代碼是共享的。顯然,把方法設(shè)置到proto

4、type的寫法顯得優(yōu)雅多了,盡管調(diào)用形式?jīng)]有變,但邏輯上卻體現(xiàn)了方法與類的關(guān)系,相對前面的寫法,更容易理解和組織代碼。那么,對于多層次類型的構(gòu)造函數(shù)情況又如何呢?我們再來看下面的代碼:functionPerson(name)//基類構(gòu)造函數(shù)2{3this.name=name;4};56Person.prototype.SayHello=function()//給基類構(gòu)造函數(shù)的prototype添加方法7{8alert("Hello,I'm"+this.name);9};1011functionEmployee(name,salary)//子類構(gòu)造函數(shù)12{13Person.call(thi

5、s,name);//調(diào)用基類構(gòu)造函數(shù)14this.salary=salary;15};1617Employee.prototype=newPerson();//建一個(gè)基類的對象作為子類原型的原型,這里很有意思1819Employee.prototype.ShowMeTheMoney=function()//給子類添構(gòu)造函數(shù)的prototype添加方法20{21alert(this.name+"$"+this.salary);22};2324varBillGates=newPerson("BillGates");//創(chuàng)建基類Person的BillGates對象25varSteveJobs=n

6、ewEmployee("SteveJobs",1234);//創(chuàng)建子類Employee的SteveJobs對象2627BillGates.SayHello();//通過對象直接調(diào)用到prototype的方法28SteveJobs.SayHello();//通過子類對象直接調(diào)用基類prototype的方法,關(guān)注!29SteveJobs.ShowMeTheMoney();//通過子類對象直接調(diào)用子類prototype的方法3031alert(BillGates.SayHello==SteveJobs.SayHello);//顯示:true,表明prototype的方法是共享的這段代碼的第17行

7、,構(gòu)造了一個(gè)基類的對象,并將其設(shè)為子類構(gòu)造函數(shù)的prototype,這是很有意思的。這樣做的目的就是為了第28行,通過子類對象也可以直接調(diào)用基類prototype的方法。為什么可以這樣呢?原來,在JavaScript中,prototype不但能讓對象共享自己財(cái)富,而且prototype還有尋根問祖的天性,從而使得先輩們的遺產(chǎn)可以代代相傳。當(dāng)從一個(gè)對象那里讀取屬性或調(diào)用方法時(shí),如果該對象自身不存在這樣的屬性或方法,就會(huì)去自

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。