999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

淺析JavaScript實現基于原型對象的“繼承”

2018-03-21 09:27:04沈淺
電腦知識與技術 2018年3期

沈淺

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

關鍵詞:JavaScript;原型繼承;構造函數;原型對象

中圖分類號:TP311 文獻標識碼: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的編程語言,其高端、動態以及面向對象的編程風格,使得JavaScript已經從一門簡單的腳本語言進化成為一門強大的編程語言,其基于原型的繼承風格,使用起來非常靈活、高效,但對于初學者,要準確理解原型對象及其繼承機制還是比較困難,本文就JavaScript原型繼承的方式進行了介紹,并結合實例進行分析。

2 基于類的繼承

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

3 基于原型的繼承

3.1 原型對象

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

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

3.2 原型繼承的問題及改進

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

4 結束語

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

參考文獻:

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

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

主站蜘蛛池模板: 欧美综合区自拍亚洲综合天堂| 欧美午夜久久| 国产精品第| 4虎影视国产在线观看精品| 色播五月婷婷| 伊人91在线| 欧美成人怡春院在线激情| 韩国v欧美v亚洲v日本v| 园内精品自拍视频在线播放| 国产在线98福利播放视频免费| 一本二本三本不卡无码| 视频一本大道香蕉久在线播放| 91色国产在线| 亚洲综合久久成人AV| 国产一区免费在线观看| 国产精品美人久久久久久AV| 99久久精品免费看国产免费软件| Jizz国产色系免费| 国产精品亚洲欧美日韩久久| 国产亚洲精品在天天在线麻豆 | 香蕉伊思人视频| 蜜桃视频一区二区| 国产黄在线免费观看| 成人无码一区二区三区视频在线观看| 亚州AV秘 一区二区三区| 免费一级毛片完整版在线看| JIZZ亚洲国产| 久久精品国产精品一区二区| 亚洲男人的天堂在线观看| 自慰网址在线观看| 在线观看国产小视频| 国产乱子伦一区二区=| 亚洲bt欧美bt精品| 免费在线看黄网址| 一级爱做片免费观看久久| 狠狠做深爱婷婷综合一区| 黄色成年视频| 亚洲第一成人在线| 制服丝袜亚洲| 2020极品精品国产| 69国产精品视频免费| 日本人妻一区二区三区不卡影院 | 亚洲av无码成人专区| 中文字幕在线欧美| 国外欧美一区另类中文字幕| 精品少妇人妻无码久久| 国产高清在线丝袜精品一区| 国产乱子伦视频在线播放| 亚洲欧美日韩天堂| 婷婷激情亚洲| 国产网友愉拍精品视频| 激情综合婷婷丁香五月尤物 | 亚洲人成在线精品| 国产精品网曝门免费视频| 99re在线观看视频| 91国内视频在线观看| 午夜日韩久久影院| 任我操在线视频| 久久国产免费观看| 国产永久在线观看| 99九九成人免费视频精品| 久久国产精品国产自线拍| 欧美精品啪啪一区二区三区| 中国一级毛片免费观看| 在线毛片网站| 欧美三级视频网站| 亚洲综合色区在线播放2019 | 尤物成AV人片在线观看| 亚洲黄色成人| 日韩 欧美 国产 精品 综合| 亚洲国产中文在线二区三区免| 鲁鲁鲁爽爽爽在线视频观看| 第九色区aⅴ天堂久久香| 国产精品v欧美| 热热久久狠狠偷偷色男同| 综合色婷婷| 久久人搡人人玩人妻精品| 色窝窝免费一区二区三区 | 日韩高清欧美| 国产91丝袜| 日韩a级片视频| 亚洲成年人片|