資源描述:
《javascript中的原型繼承基礎(chǔ)學習教程_基礎(chǔ)知識》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、JavaScript中的原型繼承基礎(chǔ)學習教程大多數(shù)編程語言中,都有類和對象,一個類可以繼承其他類。在JavaScript中,繼承是基于原型的(prototype-based),這意味著JavaScript中沒有類,取而代之的是一個對象繼承另一個對象。:)1.繼承,theproto在JavaScript中,當一個對彖rabbit繼承另一了對彖animal時,這意味著rabbit對彖中將會有一個特殊的屬性:rabbit._proto_=animal;當訪問rabbit對象吋,如果解釋器在rabbit中不能找到屬性,那么它會順著_proto—鏈往上在animal對象中尋找栗了中的
2、—proto—屈性僅在Chrome和FircFox中可以訪問,請看一個栗了:varanimal={eats:true}varrabbit二{jumps:true}rabbit._proto_=animal//inheritalert(rabbit.eats)//trueeats屬性是從animal對象中訪問的。如果在rabbit對彖屮已經(jīng)發(fā)現(xiàn)了屬性,那么就不會去檢查proto屬性啦。再來一個栗子,當子類中也有eats屬性時,父類中的就不會訪問了。varanimal二{eats:true}varfedUpRabbit二{eats:false}fedUpRabbit._prot
3、o_=animalalert(fedUpRabbit.eats)//false你也可以在animal中添加一個函數(shù),那么在rabbit中也可以訪問了。varanimal二{eat:function(){alert(〃I'mfull")this?full二true}}varrabbit二{jump:function(){/*something*/}rabbit?_proto_=animal(1)rabbit,eat():rabbit,eat()函數(shù)以如下兩步執(zhí)行:首先,解釋器查找rabbit,cat,rabbitH1沒有cat函數(shù),那么它就順著rabbit._proto—往上
4、找,在animal中找到了。函數(shù)以this=rabbit運行。this值與_proto_屬性完全無關(guān)。因此,this,ful1=true在rabbit中:看看這里我們有什么新發(fā)現(xiàn),一個對象調(diào)用了父類函數(shù),但是this還是指向?qū)﹀璞旧?,這就是繼承。被—proto—引用的對象稱作是原型(prototype),animal是rabbit的原型(譯者注:這就是rabbit的_proto_屬性引用了animal的prototype屬性)(2)讀時查找,不是寫時當讀取一個對象時,比如this,prop,解釋器會在它的原型中查找屬性。當設(shè)置一個屈性值時,比如this,prop=value
5、,那么就沒有理由去查找了,這個屬性(prop)會被直接添加到這個對象中(這里是this)odeleteobj.prop也類似,它只刪除對象木身的屬性,原型中的屬性保持原封不動。(3)關(guān)T*proto如果你在閱讀指南,這里我們叫的—roto—,在指南中表示為[[Prototype]]o雙方括號是很重要的,因為有另一個屈性叫做prototypeo1.Object?create,Object?getPrototypeOf—proto_是一個非標準的屬性,由Chrome/FireFox提供訪問,在其他的瀏覽器中保持不可見。所冇的現(xiàn)代瀏覽器除了Opera(TE>9)支持兩個標準的函數(shù)
6、來處理原型問題:Object.ceate(prop[,props])用給定了proto創(chuàng)建一個空對象:varanimal二{eats:true}rabbit=Object?create(animal)alert(rabbit,eats)//true上而代碼創(chuàng)建了一個空rabbit對象,并月.原型設(shè)置為animalrabbit對彖創(chuàng)建好以后,我們可以往里添加屬性了:varanimal={eats:true}rabbit=Objcct?create(animal)rabbit,jumps=trueObject,creat函數(shù)的第二個參數(shù)props是口J選的,它允許像新對象設(shè)置屬
7、性。這里就省略了,因為我們關(guān)系的繼承。(1)Object.gctPrototypcOf(obj)返回obj.—proto—的值。這個函數(shù)是標準的,可以在不能直接訪問—proto—屬性的瀏覽器中使用了。varanimal二{eats:true}rabbit二Object,create(animal)alert(Object,gctPrototypeOf(rabbit)二二二emimal)//true現(xiàn)代瀏覽器允許讀取_proto_M性值,但是不能設(shè)置。1.Theprototype有一些好的跨瀏覽器的方式設(shè)置_prot