• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    JavaScript中基于原型的繼承的實現(xiàn)與分析

    2014-04-29 00:00:00王貫飛
    計算機光盤軟件與應(yīng)用 2014年3期

    摘 要:本文主要介紹JavaScript中基于原型的繼承的實現(xiàn)方式,通過實例的說明,增強讀者對基于類的繼承和基于原型的繼承的理解,同時分析了基于原型的繼承模式的利弊。

    關(guān)鍵詞:JavaScript;基于原型的繼承;基于類的繼承

    中圖分類號:TP391

    隨著Node.js的誕生,JavaScript已經(jīng)不僅僅是一門編程語言,其在客戶端和服務(wù)器端的雙重主導(dǎo)地位,使得“一切皆為JavaScript”成為一種必然趨勢。近年來,JavaScript已經(jīng)從一門簡單的腳本語言進化成為一門強大的編程語言。

    根據(jù)多年來的教學(xué)經(jīng)驗,JavaScript是一種既簡單又難以掌握的語言。而其難點之一,就在于對其原型對象及其繼承機制的理解。

    1 基于類的繼承和基于原型的繼承

    首先,現(xiàn)在廣為流傳的面向?qū)ο蟮木幊陶Z言,例如:Java,是基于類的語言。在基于類的語言中,對象是類的實例,并且可以從另一個類繼承。而在基于類的語言中,繼承的好處主要有兩點。

    1.1 代碼重用性高。如果我們新創(chuàng)建的類與已有的類有絕大部分相類似,則沒有必要再重新定義這個完整的類。最好的方式,就是只說明新創(chuàng)建的類與已有的類之間的不同之處。而繼承,正好實現(xiàn)了代碼的重用,大大減少了軟件開發(fā)的成本。

    1.2 繼承引入了一套類型系統(tǒng)的規(guī)范。這樣使得程序員可以將子類的對象直接賦值給父類的引用,無需再編寫顯式的類型轉(zhuǎn)化。既減輕了工作量又保證了類型系統(tǒng)在安全上的優(yōu)勢。

    而對于JavaScript這種弱類型語言來說,我們不需要考慮類型轉(zhuǎn)化問題,對象繼承關(guān)系更關(guān)注于這個對象能做什么而不是它從哪里來。為此JavaScript提供了一套更為豐富的代碼重用模式。JavaScript是一門基于原型的語言,所以對象可以直接從其它對象繼承而來。

    2 原型對象的理解

    在認識原型對象之前,我們還應(yīng)該理解一下基于類的語言和基于原型的語言對于類,對象,實例定義的差別。在基于類的語言中,程序員需要單獨對類進行定義,并且通過構(gòu)造器來創(chuàng)建該類的實例,可以使用new操作符來實現(xiàn)創(chuàng)建類的實例。在JavaScript中也有著相類似的模式,與Java不同的是,JavaScript沒有類定義和特殊的構(gòu)造器定義。需要程序員自己定義一個構(gòu)造函數(shù)來創(chuàng)建屬性,而所有的函數(shù)都可以被用來定義構(gòu)造函數(shù)。所謂實例,對于基于類的語言來說,一個實例就是一個類的個體成員,而類本身只是對對象屬性和行為的一種抽象定義。在JavaScript中,實例和類則沒有這樣的本質(zhì)區(qū)別,實例可以看做是對象。

    了解到了JavaScript對于對象的定義,接下來我們來理解一下原型對象的概念。在JavaScript中,只要創(chuàng)建一個新函數(shù),就會根據(jù)一組特定規(guī)則為該函數(shù)創(chuàng)建一個prototype屬性,而這個屬性指向函數(shù)的原型對象。在默認情況下原型對象會自動獲得一個constructor屬性,而這個屬性包含一個指向prototype屬性所在函數(shù)對象的指針。

    當(dāng)調(diào)用構(gòu)造函數(shù)創(chuàng)建一個新實例后,該實例所包含的一個指針指向構(gòu)造函數(shù)的原型對象。而在ECMA-262第5版中,這個指針叫做[[prototype]]。下面我們用Employee這個例子,簡單說明一下構(gòu)造函數(shù),原型函數(shù)以及新創(chuàng)建的實例的實現(xiàn)以及在內(nèi)存中的關(guān)系。

    inherit()函數(shù)的實現(xiàn)就是對原型式模式的應(yīng)用,它可以防止庫函數(shù)對那些不受控制的對象的意外修改。原型式模式傳入的是引用類型值,所以也存在共享屬性的問題,如組合模式一樣,也可以用構(gòu)造函數(shù)的類似方式解決這一問題。

    參考文獻:

    [1]Crockford D.JavaScript語言精粹[M].北京:電子工業(yè)出版社,2009.

    [2]Flanagan D.JavaScript權(quán)威指南(第六版)[M].北京:中國電力出版社,2001.

    [3]Nicholas C.Zakas JavaScript高級程序設(shè)計(第三版)[M].北京:人民郵電出版社,2012.

    作者簡介:王貫飛(1966.04-),女,副教授,本科,主要從事計算機多媒體、Flash動畫編程、多媒體課件制作。

    作者單位:遼寧輕工職業(yè)學(xué)院,遼寧大連 116100

    罗定市| 文化| 朔州市| 兴业县| 永修县| 九龙县| 封开县| 类乌齐县| 临沧市| 札达县| 班戈县| 萨嘎县| 宁明县| 五家渠市| 奉节县| 丹巴县| 七台河市| 瑞安市| 大安市| 绥中县| 闻喜县| 乌恰县| 拉孜县| 炎陵县| 天柱县| 焦作市| 孝感市| 日照市| 永春县| 洪雅县| 瓦房店市| 利川市| 义马市| 宜丰县| 临安市| 会东县| 萝北县| 武定县| 宝清县| 和龙市| 诏安县|