javascript原型prototype

javascript原型prototype

ID:8966289

大小:91.00 KB

頁數(shù):10頁

時(shí)間:2018-04-13

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īng)用文檔-天天文庫。

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

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

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

4、e的寫法顯得優(yōu)雅多了,盡管調(diào)用形式?jīng)]有變,但邏輯上卻體現(xiàn)了方法與類的關(guān)系,相對(duì)前面的寫法,更容易理解和組織代碼。那么,對(duì)于多層次類型的構(gòu)造函數(shù)情況又如何呢?我們?cè)賮砜聪旅娴拇a: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(this,na

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

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

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

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

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

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(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)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。