js 原型鏈

原型鏈?zhǔn)乔岸嗣嬖嚴(yán)镆粋€(gè)經(jīng)久不衰的問題了甩挫,自己也查閱了很多的資料滑黔,像紅寶書孵户、JavaScript忍者秘籍上都有對(duì)這一方面的描述和概括兽狭,今天就像自己歸納一下這個(gè)問題:

首先憾股,我們先來看一張圖:


這個(gè)繞來繞去的線是不是很惡心呢?那就先別管這些了箕慧,等整個(gè)邏輯我們梳理完就自然而然的會(huì)明白了~

一服球、 什么是原型鏈?

? ? ? ? 每個(gè)對(duì)象都可以有一個(gè)原型_proto_颠焦,這個(gè)原型還可以有它自己的原型斩熊,以此類推,形成一個(gè)原型鏈伐庭。查找特定屬性的時(shí)候粉渠,我們先去這個(gè)對(duì)象里去找,如果沒有的話就去它的原型對(duì)象里面去似忧,如果還是沒有的話再去向原型對(duì)象的原型對(duì)象里去尋找...... 這個(gè)操作被委托在整個(gè)原型鏈上渣叛,這個(gè)就是我們說的原型鏈了。

二盯捌、原型指針

? ? 我們知道了原型的概念淳衙,接下來我們就照著上面的圖來具體分析一下原型的指針;中間最上面藍(lán)色模塊標(biāo)注的構(gòu)造函數(shù)Foo, 里面有兩個(gè)屬性: _proto_ 和 prototype, 這兩個(gè)很容易使人混淆,先說說prototype:

prototype:

? ??prototype屬性箫攀,它是函數(shù)所獨(dú)有的肠牲,它是從一個(gè)函數(shù)指向一個(gè)對(duì)象。它的含義是函數(shù)的原型對(duì)象靴跛,也就是這個(gè)函數(shù)(其實(shí)所有函數(shù)都可以作為構(gòu)造函數(shù))所創(chuàng)建的實(shí)例的原型對(duì)象; 這個(gè)屬性是一個(gè)指針缀雳,指向一個(gè)對(duì)象,這個(gè)對(duì)象的用途就是包含所有實(shí)例共享的屬性和方法(我們把這個(gè)對(duì)象叫做原型對(duì)象);

__proto__:

? ??__proto__?是原型鏈查詢中實(shí)際用到的梢睛,它總是指向?prototype肥印,換句話說就是指向構(gòu)造函數(shù)的原型對(duì)象,它是對(duì)象獨(dú)有的绝葡。注意深碱,為什么Foo構(gòu)造也有這個(gè)屬性呢,因?yàn)樵賘s的宇宙里萬物皆對(duì)象藏畅,包括函數(shù)敷硅;

根據(jù)以上的概括我們能知道Foo構(gòu)造函數(shù)_proto_指向的是他的構(gòu)造函數(shù)的原型對(duì)象,它的構(gòu)造函數(shù)是Function, 也就是說Foo的_proto_指向Function.prototype,? 我們?cè)倏吹阶筮吘G色的a和b函數(shù)的_proto_指像的是Foo.prototype,因?yàn)樗麄兪峭ㄟ^ new Foo實(shí)例化出來的愉阎,它們的構(gòu)造函數(shù)就是Foo(), 即a._proto_ =?Foo.prototype绞蹦;? 接著我們來看看最右邊紫色的模塊Function.prororype, 它的_proto_指針指向的是Object.prototype,Object._proto_又為null.。于是我們就可以得出:在原型鏈中的指向是榜旦,函數(shù) → 構(gòu)造行數(shù)? → Function.prototype → Object.protype → null ;


constructor:

? ? 我們看到途中最中間灰色模塊有一個(gè)constructor屬性幽七,這個(gè)又是做什么用的呢?

每個(gè)函數(shù)都有一個(gè)原型對(duì)象溅呢,該原型對(duì)象有一個(gè)constructor屬性锉走,指向創(chuàng)建對(duì)象的函數(shù)本身。

? ? 此外藕届,我們還可以使用constructor屬性挪蹭,所有的實(shí)例對(duì)象都可以訪問constructor屬性,constructor屬性是創(chuàng)建實(shí)例對(duì)象的函數(shù)的引用休偶。我們可以使用constructor屬性驗(yàn)證實(shí)例的原型類型(與操作符instanceof非常類似)梁厉。

? ? 由于constructor屬性僅僅是原始構(gòu)造函數(shù)的引用,因此我們可以使用該屬性創(chuàng)建新的對(duì)象踏兜,如:

? ??

? ? 通過第一個(gè)對(duì)象實(shí)例化對(duì)象的constuctor方法創(chuàng)建第2個(gè)實(shí)例化對(duì)象词顾,說明創(chuàng)建的新對(duì)象ninja2 是Ninja的實(shí)例,由于ninja和ninja2不是同一個(gè)對(duì)象可以得出它們是兩個(gè)截然不同的實(shí)例碱妆;

結(jié)論:

? ? ? ? 1肉盹、__proto__?是原型鏈查詢中實(shí)際用到的,它總是指向?prototype疹尾;

? ? ? ? 2上忍、prototype 是函數(shù)所獨(dú)有的骤肛,在定義構(gòu)造函數(shù)時(shí)自動(dòng)創(chuàng)建,它總是被?__proto__?所指窍蓝。

所有對(duì)象都有__proto__屬性腋颠,函數(shù)這個(gè)特殊對(duì)象除了具有__proto__屬性,還有特有的原型屬性prototype吓笙。prototype對(duì)象默認(rèn)有兩個(gè)屬性淑玫,constructor屬性和__proto__屬性。prototype屬性可以給函數(shù)和對(duì)象添加可共享(繼承)的方法面睛、屬性絮蒿,而__proto__是查找某函數(shù)或?qū)ο蟮脑玩湻绞健onstructor叁鉴,這個(gè)屬性包含了一個(gè)指針歌径,指回原構(gòu)造函數(shù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末亲茅,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子狗准,更是在濱河造成了極大的恐慌克锣,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腔长,死亡現(xiàn)場(chǎng)離奇詭異袭祟,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)捞附,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門巾乳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鸟召,你說我怎么就攤上這事胆绊。” “怎么了欧募?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵压状,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我跟继,道長(zhǎng)种冬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任舔糖,我火速辦了婚禮娱两,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘金吗。我一直安慰自己十兢,他們只是感情好趣竣,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著纪挎,像睡著了一般期贫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上异袄,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天通砍,我揣著相機(jī)與錄音,去河邊找鬼烤蜕。 笑死封孙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的讽营。 我是一名探鬼主播虎忌,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼后室,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼宙址!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起届榄,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤莉兰,失蹤者是張志新(化名)和其女友劉穎挑围,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體糖荒,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡杉辙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捶朵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜘矢。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖综看,靈堂內(nèi)的尸體忽然破棺而出品腹,到底是詐尸還是另有隱情,我是刑警寧澤红碑,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布珍昨,位于F島的核電站,受9級(jí)特大地震影響句喷,放射性物質(zhì)發(fā)生泄漏镣典。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一唾琼、第九天 我趴在偏房一處隱蔽的房頂上張望兄春。 院中可真熱鬧,春花似錦锡溯、人聲如沸赶舆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芜茵。三九已至叙量,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間九串,已是汗流浹背绞佩。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留猪钮,地道東北人品山。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像烤低,于是被迫代替她去往敵國(guó)和親肘交。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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

  • JS中原型鏈扑馁,說簡(jiǎn)單也簡(jiǎn)單涯呻。 首先明確: 函數(shù)(Function)才有prototype屬性,對(duì)象(除Object...
    前小白閱讀 3,907評(píng)論 0 9
  • JS中原型鏈腻要,說簡(jiǎn)單也簡(jiǎn)單复罐。 首先明確: 函數(shù)(Function)才有prototype屬性,對(duì)象(除Object...
    亞訊閱讀 4,744評(píng)論 1 8
  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持闯第,譯者再次奉上一點(diǎn)點(diǎn)福利:阿里云產(chǎn)品券,享受所有官網(wǎng)優(yōu)惠缀拭,并抽取幸運(yùn)大...
    HetfieldJoe閱讀 2,987評(píng)論 4 14
  • 前言 在JavaScript中沒"子類”和“父類”的概念咳短,進(jìn)一步地也沒有“類”和“實(shí)例”的的區(qū)分。它靠一種看上去十...
    vzardlloo閱讀 784評(píng)論 0 5
  • 有多少人曾幻想過勾效,目前這一段戀情可以陪著自己走進(jìn)棺材? 生死契闊叛甫,至死不渝 還沒開始拉手层宫,就已經(jīng)想好了一起住之后要...
    Joycezz閱讀 210評(píng)論 0 0