JavaScript原型鏈

原型鏈?zhǔn)荍avaScript中比較重要的一個(gè)概念嚼锄,也是JavaScript中實(shí)現(xiàn)繼承的主要手段蔽豺。


原型鏈?zhǔn)鞘裁辞螅恳靼走@個(gè)概念,首先要明白修陡,原型是什么沧侥。

原型,就我個(gè)人而言魄鸦,就像我們的姓氏一樣(這個(gè)比喻不太恰當(dāng)),天地初開旺罢,世界大同绢记,我們?nèi)耍ɑ悾┒际峭环N姓氏(基類的原型),我們都從人這個(gè)基類下繼承了姓氏這么一個(gè)屬性蠢熄,當(dāng)然,你也可以特立獨(dú)行的去改姓签孔,自立門派砾跃,行走江湖(你的后代如果不改姓节吮,那么將會(huì)全部都跟你姓,這個(gè)沒(méi)得跑)透绩,但是并不會(huì)影響到其他人。

值得一提的是碳竟,遍歷原型的屬性是從自身的原型開始往祖先遍歷的狸臣,一直到找到該屬性為止,如果找不到烛亦,返回undefine,所以可以通過(guò)重寫父類方法‘覆蓋’父類的原型方法铐达,這就是為什么Array繼承了Object的toString()方法檬果,但Array.prototype.toString和Object.prototype.toString不一樣的原因瓮孙,Arrary自己重寫了toString()方法选脊。

可以通過(guò)hasOwnProperty這個(gè)方法來(lái)判斷該屬性是否是自身的屬性而非繼承,如果是自身偏灿,返回true角寸。

而原型鏈又是什么呢?就像族譜中的族譜線一樣扁藕。表達(dá)那種微妙的繼承關(guān)系的線,通過(guò)這種線邢疙,你就可以追根溯源,找到你的祖先疟游。(當(dāng)然,JS理論上是沒(méi)有多繼承的(其實(shí)也可以)蛮原,而族譜大多是多繼承另绩,請(qǐng)無(wú)視掉這一點(diǎn)。有那種微妙的繼承關(guān)系的感覺(jué)就行了)

道理雖然是這樣笋籽,感覺(jué)也說(shuō)得過(guò)去。但是车海,畢竟JavaScript對(duì)象不是人笛园,(人可以說(shuō)每一個(gè)都是實(shí)例侍芝,但是JavaScript對(duì)象不行吧)。

每當(dāng)我們聲明一個(gè)function的時(shí)候竭贩,JavaScript都會(huì)自動(dòng)給這個(gè)function添加一個(gè)prototype(原型)這么一個(gè)屬性,而prototype的value其實(shí)就是很多屬性的集合,值得一提的是哟冬,prototype里面有一個(gè)constructor(構(gòu)造函數(shù))這么一個(gè)屬性,顧名思義可岂,這個(gè)屬性是指向function本身的翰灾,或者說(shuō),是指向這個(gè)原型所對(duì)應(yīng)的的function本身纸淮,可以通過(guò)這個(gè)屬性來(lái)判斷其構(gòu)造函數(shù)是什么。

當(dāng)我們要實(shí)現(xiàn)繼承的時(shí)候绘面,一般是將父類的實(shí)例賦值給子類的原型,如 SubType.prototype = new SupType();這樣揭璃,子類的原型就有了父類的所有屬性,值得注意的是歼秽,如果我們創(chuàng)建了子類的實(shí)例情组,在調(diào)用子類的constructor屬性的時(shí)候,會(huì)發(fā)現(xiàn)呻惕,這時(shí)返回的是父類的構(gòu)造函數(shù),如var a = new SubType(); console.log(a.constructor);會(huì)返回function SupType(){}(所以我們需要手動(dòng)修正做院,在繼承之后加上如下操作:SubType.prototype.constructor = SubType濒持。)當(dāng)我們一層一層的繼承的時(shí)候,這種實(shí)例與原型之間的這種關(guān)系柑营,就構(gòu)成了我們所說(shuō)的原型鏈。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末酒奶,一起剝皮案震驚了整個(gè)濱河市奶赔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌站刑,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摆尝,死亡現(xiàn)場(chǎng)離奇詭異因悲,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)臼朗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)绣否,“玉大人,你說(shuō)我怎么就攤上這事蒜撮」虺剩” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵苹支,是天一觀的道長(zhǎng)误阻。 經(jīng)常有香客問(wèn)我,道長(zhǎng)究反,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任狼速,我火速辦了婚禮卦停,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惊完。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開白布本股。 她就那樣靜靜地躺著桐腌,像睡著了一般拄显。 火紅的嫁衣襯著肌膚如雪案站。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,549評(píng)論 1 312
  • 那天承边,我揣著相機(jī)與錄音,去河邊找鬼险污。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蛔糯,可吹牛的內(nèi)容都是我干的窖式。 我是一名探鬼主播,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼淮逻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蜒灰!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起强窖,我...
    開封第一講書人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎脑漫,沒(méi)想到半個(gè)月后咙崎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡网杆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年伊滋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笑旺。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡筒主,死狀恐怖鸟蟹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情建钥,我是刑警寧澤火诸,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站置蜀,受9級(jí)特大地震影響奈搜,放射性物質(zhì)發(fā)生泄漏盯荤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一宏粤、第九天 我趴在偏房一處隱蔽的房頂上張望灼卢。 院中可真熱鬧,春花似錦鞋真、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)特幔。三九已至闸昨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間溉跃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留打洼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓炫惩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親他嚷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子芭毙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

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

  • 請(qǐng)移步:https://blog.cdswyda.com/post/20161121
    依韻宵音閱讀 366評(píng)論 0 17
  • 在JS中退敦,原型鏈?zhǔn)且粋€(gè)重要的概念,不管是繼承還是屬性值的查找中侈百,都用到了原型鏈的基本知識(shí),有些朋友經(jīng)常問(wèn)我一些關(guān)于...
    彬_仔閱讀 1,596評(píng)論 2 20
  • 前言 在寫復(fù)雜的 JavaScript 應(yīng)用之前讽坏,充分理解原型鏈繼承的工作方式是每個(gè) JavaScript 程序員...
    朋友喜歡叫我春哥閱讀 734評(píng)論 0 5
  • javascript原型鏈圖解函數(shù)對(duì)象及其 prototype 屬性函數(shù)的所有實(shí)例中的__proto__屬性都指向...
    黃老之學(xué)閱讀 1,210評(píng)論 0 1
  • iOS與安卓的區(qū)別: 1路呜、兩者運(yùn)行機(jī)制不同:iOS采用的是沙盒運(yùn)行機(jī)制,安卓采用的是虛擬機(jī)運(yùn)行機(jī)制拣宰。2、兩者后臺(tái)制...
    Shirly_you閱讀 2,178評(píng)論 0 5