JS中的原型鏈

最近在面試胖笛,幾乎每家公司都有被問到原型相關(guān)的問題网持,雖然看過不少文章,但總感覺自己每次回答的時(shí)候都沒辦法把這個(gè)知識點(diǎn)講得清楚长踊,想來還是多借鑒一些文章功舀,然后結(jié)合自己的面試經(jīng)歷來整理一下。

首先什么是原型身弊?

JavaScript中除了基本類型外的數(shù)據(jù)類型辟汰,都是對象。但是由于其沒有類(class阱佛,ES6引入了class帖汞,但只是語法糖)的概念,如何將所有對象聯(lián)系起來就成了一個(gè)問題瘫絮,于是就有了原型和原型鏈的概念涨冀。
簡單來說,原型和原型鏈?zhǔn)荍S中解決繼承的一種方案麦萤。

原型鏈又是如何實(shí)現(xiàn)的鹿鳖?

當(dāng)談到繼承時(shí),JavaScript 只有一種結(jié)構(gòu):對象壮莹。每個(gè)實(shí)例對象( object )都有一個(gè)私有屬性(稱之為 __proto__ )指向它的構(gòu)造函數(shù)的原型對象(prototype )翅帜。該原型對象也有一個(gè)自己的原型對象(__proto__ ) ,層層向上直到一個(gè)對象的原型對象為 null命满。根據(jù)定義涝滴,null 沒有原型,并作為這個(gè)原型鏈中的最后一個(gè)環(huán)節(jié)胶台。

一些跟原型相關(guān)的重要的知識點(diǎn):

  • 每一個(gè)構(gòu)造函數(shù)都擁有一個(gè)prototype屬性歼疮,這個(gè)屬性指向一個(gè)對象,也就是原型對象诈唬。當(dāng)使用這個(gè)構(gòu)造函數(shù)創(chuàng)建實(shí)例的時(shí)候韩脏,prototype屬性指向的原型對象就成為實(shí)例的原型對象。
  • 原型對象默認(rèn)擁有一個(gè)constructor屬性铸磅,指向指向它的那個(gè)構(gòu)造函數(shù)(也就是說構(gòu)造函數(shù)和原型對象是互相指向的關(guān)系)赡矢。
    每個(gè)對象都擁有一個(gè)隱藏的屬性[[prototype]]杭朱,指向它的原型對象,這個(gè)屬性可以通過
  • Object.getPrototypeOf(obj) 或 obj.__proto__ 來訪問吹散。
    實(shí)際上弧械,構(gòu)造函數(shù)的prototype屬性與它創(chuàng)建的實(shí)例對象的[[prototype]]屬性指向的是同一個(gè)對象,即 對象.__proto__ === 函數(shù).prototype 空民。
  • 原型對象就是用來存放實(shí)例中共有的那部分屬性刃唐。
  • 在JavaScript中,所有的對象都是由它的原型對象繼承而來,反之,所有的對象都可以作為原型對象存在称簿。
  • 訪問對象的屬性時(shí)丰歌,JavaScript會(huì)首先在對象自身的屬性內(nèi)查找,若沒有找到报辱,則會(huì)跳轉(zhuǎn)到該對象的原型對象中查找与殃。

總結(jié):

  1. 當(dāng) new 一個(gè)函數(shù)的時(shí)候會(huì)創(chuàng)建一個(gè)對象,『函數(shù).prototype』 等于 『被創(chuàng)建對象.__proto__』
  2. 一切函數(shù)都是由 Function 這個(gè)函數(shù)創(chuàng)建的碍现,所以『Function.prototype === 被創(chuàng)建的函數(shù).__proto__』
  3. 一切函數(shù)的原型對象都是由 Object 這個(gè)函數(shù)創(chuàng)建的幅疼,所以『Object.prototype ===
    一切函數(shù).prototype.__proto__』

參考資料:

  1. MDN繼承與原型鏈
  2. 三分鐘看完JavaScript原型與原型鏈
  3. 構(gòu)造對象,原型和原型鏈筆記
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末昼接,一起剝皮案震驚了整個(gè)濱河市爽篷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌慢睡,老刑警劉巖逐工,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異漂辐,居然都是意外死亡泪喊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門髓涯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袒啼,“玉大人,你說我怎么就攤上這事纬纪◎驹伲” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵包各,是天一觀的道長摘仅。 經(jīng)常有香客問我,道長髓棋,這世上最難降的妖魔是什么实檀? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任惶洲,我火速辦了婚禮,結(jié)果婚禮上膳犹,老公的妹妹穿的比我還像新娘恬吕。我一直安慰自己,他們只是感情好须床,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布铐料。 她就那樣靜靜地躺著,像睡著了一般豺旬。 火紅的嫁衣襯著肌膚如雪钠惩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天族阅,我揣著相機(jī)與錄音篓跛,去河邊找鬼。 笑死坦刀,一個(gè)胖子當(dāng)著我的面吹牛愧沟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鲤遥,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼沐寺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了盖奈?” 一聲冷哼從身側(cè)響起混坞,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钢坦,沒想到半個(gè)月后究孕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡场钉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年蚊俺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逛万。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡泳猬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宇植,到底是詐尸還是另有隱情得封,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布指郁,位于F島的核電站忙上,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏闲坎。R本人自食惡果不足惜疫粥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一茬斧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧梗逮,春花似錦项秉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至底哗,卻和暖如春岁诉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背跋选。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工涕癣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人野建。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓属划,卻偏偏與公主長得像,于是被迫代替她去往敵國和親候生。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

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