亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        淺析JavaScript實現(xiàn)基于原型對象的“繼承”

        2018-03-21 09:27:04沈淺
        電腦知識與技術(shù) 2018年3期
        關(guān)鍵詞:構(gòu)造函數(shù)繼承

        沈淺

        摘要: 概述JavaScript實現(xiàn)繼承的機制,對比基于類的繼承,通過實例說明原型繼承的特點,提出一個改進的“寄生組合模式”,使讀者實現(xiàn)原型繼承變得游刃有余。

        關(guān)鍵詞:JavaScript;原型繼承;構(gòu)造函數(shù);原型對象

        中圖分類號:TP311 文獻標(biāo)識碼:A 文章編號:1009-3044(2018)03-0091-02

        Abstract: Overview the JavaScripts implementation of the mechanism on the inheritance, compare to Based on the class of inheritance, explain the prototype of inheritances characteristics through examples, propose an improved “parasitic combination mode”, and enable the readers to realize the prototype of inheritance become to do a job with skill and ease.

        Key words: JavaScript, prototype of inheritance, constructor, prototype of object

        1 概述

        JavaScript是面向Web的編程語言,其高端、動態(tài)以及面向?qū)ο蟮木幊田L(fēng)格,使得JavaScript已經(jīng)從一門簡單的腳本語言進化成為一門強大的編程語言,其基于原型的繼承風(fēng)格,使用起來非常靈活、高效,但對于初學(xué)者,要準(zhǔn)確理解原型對象及其繼承機制還是比較困難,本文就JavaScript原型繼承的方式進行了介紹,并結(jié)合實例進行分析。

        2 基于類的繼承

        首先,面向?qū)ο缶幊陶Z言是基于類的語言,以Java為例,Java是基于類的語言,在基于類的語言中,對象是類的實例,并且一個類可以從另一個類繼承。那么,在這些基于類的語言中,實現(xiàn)繼承的好處:1)提高代碼重用性高。如果我們新創(chuàng)建的類與已有的類有絕大部分相類似,則沒有必要再重新定義這個完整的類。這樣做可以實現(xiàn)代碼的重用,大大減少了軟件開發(fā)的成本。2)繼承可以實現(xiàn)面向?qū)ο蟮摹岸鄳B(tài)”特性。程序員可以將子類的對象直接賦值給父類的引用,無需再編寫顯式的類型轉(zhuǎn)化。既減輕了工作量又保證了類型系統(tǒng)在安全上的優(yōu)勢。如例1所示代碼,這是Java中實現(xiàn)繼承的語法,class B從class A繼承,子類B的對象就繼承了父類A的所有非私有化成員。

        3 基于原型的繼承

        3.1 原型對象

        在JavaScript中,類的所有實例對象都從同一個原型對象上繼承屬性。因此,原型對象是其核心。早期使用一種所謂的“工廠模式”,即通過定義函數(shù)返回一個新創(chuàng)建的對象,后者繼承自某個原型對象。如例2所示代碼,函數(shù)inherit( )返回了一個繼承自原型對象p的新對象。此種方法并不常用,JavaScript還可以通過構(gòu)造函數(shù)來創(chuàng)建并初始化對象,只不過JavaScript沒有類定義和特殊的構(gòu)造器定義,需要程序員自己定義一個構(gòu)造函數(shù)來創(chuàng)建屬性,而所有的函數(shù)都可以被用來定義構(gòu)造函數(shù)。如例3所示代碼,在JavaScript中,只要創(chuàng)建一個新函數(shù),就會根據(jù)一組特定規(guī)則為該函數(shù)創(chuàng)建一個prototype屬性,而這個屬性指向函數(shù)的原型對象。在默認情況下,原型對象會自動獲得一個constructor屬性,而這個屬性包含一個指向prototype屬性所在函數(shù)對象的指針。當(dāng)一個函數(shù)對象被創(chuàng)建時,function構(gòu)造器產(chǎn)生的函數(shù)對象會運行代碼:“this.prototype = {constructor: this};”。

        如圖1所示,展現(xiàn)了構(gòu)造函數(shù),原型對象以及實例對象之間的關(guān)系。實例對象f指向原型對象p,與構(gòu)造函數(shù)F沒有直接的關(guān)系。在代碼中,通過測試也發(fā)現(xiàn)實例對象雖然沒有屬性sayHi,但我們卻可以調(diào)用f.sayHi( ),這說明新對象的這些屬性和方法是所有實例共享的。

        3.2 原型繼承的問題及改進

        基于原型的繼承,功能強大,一般采用原型鏈繼承方式,但也存在弊端。構(gòu)造函數(shù)的prototype屬性是一個指針,它可以是特定類型的所有實例共享的屬性和方法。如果我們在對象f中對原型對象p的某個屬性進行修改,則會影響到其他實例。這個顯然不行,我們可以通過構(gòu)造函數(shù),將不想被共享的屬性定義在構(gòu)造函數(shù)中,而將需要共享的部分放在原型對象中。這種方式稱為“寄生組合模式”。該模式既避免了原型鏈中實例共享屬性的問題,又實現(xiàn)了構(gòu)造函數(shù)無法實現(xiàn)的繼承模式,是JavaScript中比較常用的方式。如例4所示代碼,F(xiàn)ather構(gòu)造函數(shù)模擬“父類”,Son構(gòu)造函數(shù)模擬“子類”,代碼Son.prototype=new Father( );實現(xiàn)原型繼承,父類對象的所有屬性都可被子類所有對象共享。在創(chuàng)建子類實例對象時,程序會先去Son的構(gòu)造函數(shù)去找對象的屬性,如果找不到,則去子類繼承的原型對象中去查找,如果還是沒有找到,則去原型對象繼承的父類中去查找,直到找到Object對象,如果還是沒有,就報錯。

        4 結(jié)束語

        其實JavaScript并沒有提供所謂的類繼承,但是我們可以通過一種原型方式實現(xiàn),并且實現(xiàn)方法是靈活多樣的,不存在哪種更優(yōu),根據(jù)不同的需求實現(xiàn)不同方式的繼承。深入理解JavaScript中實現(xiàn)繼承的原理,即原型及原型鏈的問題,只要理解了這些,實現(xiàn)繼承就可以變得游刃有余。

        參考文獻:

        [1] David Flanagan.JavaScript權(quán)威指南[M]. 6版.北京:機械工業(yè)出版社,2012,201-217.

        [2] 王貫飛.JavaScrip中基于原型的繼承的實現(xiàn)與分析[J].計算機光盤軟件與應(yīng)用,2014(3):110-111.

        猜你喜歡
        構(gòu)造函數(shù)繼承
        一道試題的解法分析與方法應(yīng)用
        考試周刊(2017年38期)2017-12-28 19:32:38
        例談洛必達法則在高考數(shù)學(xué)壓軸題的應(yīng)用
        淺談杜審言、杜甫的祖孫關(guān)系:推崇、繼承、發(fā)展
        人間(2016年28期)2016-11-10 21:48:10
        淺論紫砂藝術(shù)的繼承與創(chuàng)新
        論電影《暮光之城》的哥特文化
        氣象科技史研究領(lǐng)域又一重要學(xué)術(shù)成果
        欧美亚洲国产丝袜在线| 久久成人国产精品| 法国啄木乌av片在线播放| 久久久久成人精品免费播放网站| 青青视频在线播放免费的| 在线免费观看一区二区| 夜先锋av资源网站| 日本手机在线| 久久亚洲av熟女国产| 亚洲国产精品久久久久久无码| 久久久久久人妻毛片a片| 无码Av在线一区二区三区| 日韩精品人妻一区二区三区蜜桃臀 | 人妻丝袜中文无码av影音先锋专区| 怡红院a∨人人爰人人爽| 久久91综合国产91久久精品| 免费国产自拍视频在线观看| 26uuu在线亚洲欧美| 中文字幕亚洲欧美日韩2019| 免费黄网站久久成人精品| 99久久婷婷国产精品综合网站| 一本加勒比hezyo无码专区 | 草草地址线路①屁屁影院成人| 天堂а√在线最新版中文| 国产一区二区三区视频免费在线| 国产精品亚洲一级av第二区| 亚洲人成色7777在线观看不卡| 99热在线精品播放| 一区二区三区精彩视频在线观看| 人妻诱惑中文字幕在线视频| 一本色道久久综合亚洲精品不卡| 久久亚洲午夜牛牛影视| 东京热加勒比视频一区| 女人被弄到高潮的免费视频| 国产一区二区精品在线观看| 亚洲中文字幕乱码在线视频| 国产97色在线 | 国产| 麻豆国产成人av高清在线观看 | 综合网在线视频| 天堂精品人妻一卡二卡| 国产成人综合美国十次|