用原型繼承的方式藻丢,其是怎么繼承的。

繼承:繼承是OO語言(面對對象語言)的一個重要概念摄乒,許多OO語言支持兩種繼承方式:接口繼承和實現(xiàn)繼承悠反。

接口繼承只繼承方法簽名,而實現(xiàn)繼承則繼承實際的方法缺狠。由于函數(shù)沒有簽名问慎,在ECMAScript中無法實現(xiàn)接口繼承,只支持實現(xiàn)繼承挤茄。

并且其實現(xiàn)繼承主要是依靠原型鏈實現(xiàn)的如叼。--JavaScript高級程序設計


繼承概念指的是一個類(稱為子類、子接口)繼承另外的一個類(稱為父類穷劈、父接口)的功能笼恰,并可以增加它自己的新功能的能力踊沸,

繼承是類與類或者接口與接口之間最常見的關系.


知識剖析

繼承方式:

在基于類的面向對象方式中,對象(object)依靠類(class)來產(chǎn)生社证。

而在基于原型的面向對象方式中逼龟,對象(object)則是依靠構造器(constructor)利用原型(prototype)構造出來的。

JavaScript語言正是如此追葡,它是通過一種叫做原型(prototype)的方式來實現(xiàn)面向對象編程腺律。


1.首先我們來看下原型,原型prototype:

JavaScript的每個對象都繼承另一個對象宜肉,后者稱為“原型”(prototype)對象匀钧。只有null除外,它沒有自己的原型對象谬返。

原型對象上的所有屬性和方法之斯,都能被派生對象共享。這就是JavaScript繼承機制的基本設計遣铝。

通過構造函數(shù)生成實例對象時佑刷,會自動為實例對象分配原型對象。每一個構造函數(shù)都有一個prototype屬性酿炸,這個屬性就是實例對象的原型對象瘫絮。


總結一下,原型對象的作用梁沧,就是定義所有實例對象共享的屬性和方法檀何。這也是它被稱為原型對象的含義蝇裤,而實例對象可以視作從原型對象衍生出來的子對象廷支。JS中所有對象都有自己的原型對象。

2.原型鏈

對象的屬性和方法栓辜,有可能是定義在自身恋拍,也有可能是定義在它的原型對象。由于原型本身也是對象藕甩,又有自己的原型施敢,所以形成了一條原型鏈(prototype

chain)。比如狭莱,a對象是b對象的原型僵娃,b對象是c對象的原型,以此類推腋妙。

“原型鏈”的作用是默怨,讀取對象的某個屬性時,JavaScript引擎先尋找對象本身的屬性骤素,如果找不到匙睹,就到它的原型去找愚屁,如果還是找不到,就到原型的原型去找痕檬。如果直到最頂層的Object.prototype還是找不到霎槐,則返回undefined。


3.constructor屬性

prototype對象有一個constructor屬性梦谜,默認指向prototype對象所在的構造函數(shù)丘跌。

由于constructor屬性定義在prototype對象上面,意味著可以被所有實例對象繼承唁桩。

constructor屬性的作用碍岔,是分辨原型對象到底屬于哪個構造函數(shù)。



那么朵夏,訪問對象原型的方法有哪些蔼啦?

獲取實例對象obj的原型對象,有三種方法

1. obj.__proto__

2. obj.constructor.prototype

3. Object.getPrototypeOf(obj)

上面三種方法之中仰猖,前兩種都不是很可靠捏肢。最新的ES6標準規(guī)定,__proto__屬性只有瀏覽器才需要部署饥侵,其他環(huán)境可以不部署鸵赫。而obj.constructor.prototype在手動改變原型對象時,可能會失效躏升。



而除了用原型去繼承之外辩棒,對象之間的"繼承"的還有沒有其他方法呢?

有膨疏,比如構造函數(shù)綁定一睁。

構造函數(shù)綁定也是最簡單的方法,使用call或apply方法佃却,將父對象的構造函數(shù)綁定在子對象上者吁,即在子對象構造函數(shù)中加一行:

functionCat(name,color){

Animal.apply(this,arguments);this.name = name;this.color = color;

}varcat1 =newCat("大毛","黃色");

alert(cat1.species);// 動物

其他繼承方式還有直接繼承prototype、利用空對象作為中介饲帅、 拷貝繼承

這里推薦阮一峰老師的文章复凳,講解了5種關于構造對象的繼承方式:

http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance.html

好了灶泵,文章要講的基本就是這些了育八,感覺觀看。


騰訊視頻
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赦邻,一起剝皮案震驚了整個濱河市髓棋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌深纲,老刑警劉巖仲锄,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劲妙,死亡現(xiàn)場離奇詭異,居然都是意外死亡儒喊,警方通過查閱死者的電腦和手機镣奋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怀愧,“玉大人侨颈,你說我怎么就攤上這事⌒疽澹” “怎么了哈垢?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長扛拨。 經(jīng)常有香客問我耘分,道長,這世上最難降的妖魔是什么绑警? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任求泰,我火速辦了婚禮,結果婚禮上计盒,老公的妹妹穿的比我還像新娘渴频。我一直安慰自己,他們只是感情好北启,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布卜朗。 她就那樣靜靜地躺著,像睡著了一般咕村。 火紅的嫁衣襯著肌膚如雪场钉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天培廓,我揣著相機與錄音惹悄,去河邊找鬼春叫。 笑死肩钠,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的暂殖。 我是一名探鬼主播价匠,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼呛每!你這毒婦竟也來了踩窖?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤晨横,失蹤者是張志新(化名)和其女友劉穎洋腮,沒想到半個月后箫柳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡啥供,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年悯恍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伙狐。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡涮毫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贷屎,到底是詐尸還是另有隱情罢防,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布唉侄,位于F島的核電站咒吐,受9級特大地震影響,放射性物質發(fā)生泄漏属划。R本人自食惡果不足惜渤滞,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望榴嗅。 院中可真熱鬧妄呕,春花似錦、人聲如沸嗽测。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽唠粥。三九已至疏魏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間晤愧,已是汗流浹背大莫。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留官份,地道東北人只厘。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像舅巷,于是被迫代替她去往敵國和親羔味。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容