資源描述:
《淺析javascript實現(xiàn)基于原型對象的“繼承”》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、為了確保“教學(xué)點數(shù)字教育資源全覆蓋”項目設(shè)備正常使用,我校做到安裝、教師培訓(xùn)同步進行。設(shè)備安裝到位后,中心校組織各學(xué)點管理人員統(tǒng)一到縣教師進修學(xué)校進行培訓(xùn),熟悉系統(tǒng)的使用和維護。淺析JavaScript實現(xiàn)基于原型對象的“繼承” 摘要:概述JavaScript實現(xiàn)繼承的機制,對比基于類的繼承,通過實例說明原型繼承的特點,提出一個改進的“寄生組合模式”,使讀者實現(xiàn)原型繼承變得游刃有余。 關(guān)鍵詞:JavaScript;原型繼承;構(gòu)造函數(shù);原型對象 中圖分類號:TP311文獻標識碼:A文章編號:1009--0091-02 Abstract:OverviewtheJavaSc
2、ript’simplementationofthemechanismontheinheritance,comparetoBasedontheclassofinheritance,explaintheprototypeofinheritance’scharacteristicsthroughexamples,proposeanimproved“parasiticcombinationmode”,andenablethereaderstorealizetheprototypeofinheritancebecometodoajobwithskillandease. Keyword
3、s:JavaScript,prototypeofinheritance,constructor,prototypeofobject 1概述為了充分發(fā)揮“教學(xué)點數(shù)字教育資源全覆蓋”項目設(shè)備的作用,我們不僅把資源運用于課堂教學(xué),還利用系統(tǒng)的特色欄目開展課外活動,對學(xué)生進行安全教育、健康教育、反邪教教育等豐富學(xué)生的課余文化生活。為了確?!敖虒W(xué)點數(shù)字教育資源全覆蓋”項目設(shè)備正常使用,我校做到安裝、教師培訓(xùn)同步進行。設(shè)備安裝到位后,中心校組織各學(xué)點管理人員統(tǒng)一到縣教師進修學(xué)校進行培訓(xùn),熟悉系統(tǒng)的使用和維護?! avaScript是面向Web的編程語言,其高端、動態(tài)以及面向?qū)ο蟮木幊?/p>
4、風(fēng)格,使得JavaScript已經(jīng)從一門簡單的腳本語言進化成為一門強大的編程語言,其基于原型的繼承風(fēng)格,使用起來非常靈活、高效,但對于初學(xué)者,要準確理解原型對象及其繼承機制還是比較困難,本文就JavaScript原型繼承的方式進行了介紹,并結(jié)合實例進行分析?! ?基于類的繼承 首先,面向?qū)ο缶幊陶Z言是基于類的語言,以Java為例,Java是基于類的語言,在基于類的語言中,對象是類的實例,并且一個類可以從另一個類繼承。那么,在這些基于類的語言中,實現(xiàn)繼承的好處:1)提高代碼重用性高。如果我們新創(chuàng)建的類與已有的類有絕大部分相類似,則沒有必要再重新定義這個完整的類。這樣做可以實現(xiàn)
5、代碼的重用,大大減少了軟件開發(fā)的成本。2)繼承可以實現(xiàn)面向?qū)ο蟮摹岸鄳B(tài)”特性。程序員可以將子類的對象直接賦值給父類的引用,無需再編寫顯式的類型轉(zhuǎn)化。既減輕了工作量又保證了類型系統(tǒng)在安全上的優(yōu)勢。如例1所示代碼,這是Java中實現(xiàn)繼承的語法,classB從classA繼承,子類B的對象就繼承了父類A的所有非私有化成員?! ?基于原型的繼承 原型對象為了充分發(fā)揮“教學(xué)點數(shù)字教育資源全覆蓋”項目設(shè)備的作用,我們不僅把資源運用于課堂教學(xué),還利用系統(tǒng)的特色欄目開展課外活動,對學(xué)生進行安全教育、健康教育、反邪教教育等豐富學(xué)生的課余文化生活。為了確?!敖虒W(xué)點數(shù)字教育資源全覆蓋”項目設(shè)備正
6、常使用,我校做到安裝、教師培訓(xùn)同步進行。設(shè)備安裝到位后,中心校組織各學(xué)點管理人員統(tǒng)一到縣教師進修學(xué)校進行培訓(xùn),熟悉系統(tǒng)的使用和維護?! ≡贘avaScript中,類的所有實例對象都從同一個原型對象上繼承屬性。因此,原型對象是其核心。早期使用一種所謂的“工廠模式”,即通過定義函數(shù)返回一個新創(chuàng)建的對象,后者繼承自某個原型對象。如例2所示代碼,函數(shù)inherit返回了一個繼承自原型對象p的新對象。此種方法并不常用,JavaScript還可以通過構(gòu)造函數(shù)來創(chuàng)建并初始化對象,只不過JavaScript沒有類定義和特殊的構(gòu)造器定義,需要程序員自己定義一個構(gòu)造函數(shù)來創(chuàng)建屬性,而所有的函數(shù)都
7、可以被用來定義構(gòu)造函數(shù)。如例3所示代碼,在JavaScript中,只要創(chuàng)建一個新函數(shù),就會根據(jù)一組特定規(guī)則為該函數(shù)創(chuàng)建一個prototype屬性,而這個屬性指向函數(shù)的原型對象。在默認情況下,原型對象會自動獲得一個constructor屬性,而這個屬性包含一個指向prototype屬性所在函數(shù)對象的指針。當一個函數(shù)對象被創(chuàng)建時,function構(gòu)造器產(chǎn)生的函數(shù)對象會運行代碼:“={constructor:this};”?! ∪鐖D1所示,展現(xiàn)了構(gòu)造函數(shù),原型對象以及實例對象之間的關(guān)系。實例對象f指向原型對象