24:JS 原型鏈,原型鏈的頂端是什么愧怜?Object 的原型是什么呀页?Object 的原型的 原型是什么?在數(shù)組原型鏈上實(shí)現(xiàn)刪除數(shù)組重復(fù)數(shù)據(jù)的方法

能夠把這個(gè)講清楚弄明白是一件很困難的事拥坛,

首先明白原型是什么蓬蝶,在 ES6 之前,JS 沒有類和繼承的概念猜惋,JS 是通過原型來實(shí)現(xiàn)繼承的丸氛,在 JS 中一個(gè)構(gòu)造函數(shù)默認(rèn)帶有一個(gè) prototype 屬性,這個(gè)的屬性值是一個(gè)對(duì)象著摔,同時(shí)這個(gè) prototype 對(duì)象自帶有一個(gè) constructor 屬性缓窜,這個(gè)屬性指向這個(gè)構(gòu)造函數(shù),同時(shí)每一個(gè)實(shí)例都會(huì)有一個(gè)proto屬性指向這個(gè) prototype 對(duì)象谍咆,我們可以把這個(gè)叫做隱式原型禾锤,我們?cè)谑褂靡粋€(gè)實(shí)例的方法的時(shí)候,會(huì)先檢查這個(gè)實(shí)例中是否有這個(gè)方法摹察,沒有的話就會(huì)檢查這個(gè) prototype 對(duì)象是否有這個(gè)方法恩掷,基于這個(gè)規(guī)則,如果讓原型對(duì)象指向另一個(gè)類型的實(shí)例供嚎,即

constructor1.protoytpe=instance2黄娘,這時(shí)候如果試圖引用 constructor1 構(gòu)造的實(shí)例 instance1 的某個(gè)屬性 p1,

首先會(huì)在 instance1 內(nèi)部屬性中找一遍,

接著會(huì)在 instance1.proto(constructor1.prototype)即是 instance2 中尋找 p1

搜尋軌跡:instance1 -> instance2 -> constructor2.prototype……->Object.prototype;這即是原型鏈克滴,原型鏈頂端是 Object.prototype

補(bǔ)充學(xué)習(xí):

每個(gè)函數(shù)都有一個(gè) prototype 屬性逼争,這個(gè)屬性指向了一個(gè)對(duì)象,這個(gè)對(duì)象正是調(diào)用該函數(shù)而創(chuàng)建的實(shí)例的原型偿曙,那么什么是原型呢氮凝,可以這樣理解,每一個(gè) JavaScript 對(duì)象在創(chuàng)建的時(shí)候就會(huì)預(yù)制管理另一個(gè)對(duì)象望忆,這個(gè)對(duì)象就是我們所說的原型罩阵,每一個(gè)對(duì)象都會(huì)從原型繼承屬性,如圖:

prototype01.jpg

那么怎么表示實(shí)例與實(shí)例原型的關(guān)系呢启摄,這時(shí)候就要用到第二個(gè)屬性 proto

這是每一個(gè) JS 對(duì)象都會(huì)有的一個(gè)屬性稿壁,指向這個(gè)對(duì)象的原型,如圖:

prototype02.jpg

既然實(shí)例對(duì)象和構(gòu)造函數(shù)都可以指向原型歉备,那么原型是否有屬性指向構(gòu)造函數(shù)或者實(shí)例呢傅是,指向?qū)嵗菦]有的,因?yàn)橐粋€(gè)構(gòu)造函數(shù)可以生成多個(gè)實(shí)例,但是原型有屬性可以直接指向構(gòu)造函數(shù)喧笔,通過 constructor 即可

接下來講解實(shí)例和原型的關(guān)系:

當(dāng)讀取實(shí)例的屬性時(shí)帽驯,如果找不到,就會(huì)查找與對(duì)象相關(guān)的原型中的屬性书闸,如果還查不到尼变,就去找原型的原型,一直找到最頂層浆劲,那么原型的原型是什么呢嫌术,首先,原型也是一個(gè)對(duì)象牌借,既然是對(duì)象度气,我們就可以通過構(gòu)造函數(shù)的方式創(chuàng)建它,所以原型對(duì)象就是通過 Object 構(gòu)造函數(shù)生成的膨报,如圖:

prototype03.jpg

那么 Object.prototype 的原型呢磷籍,我們可以打印 console.log(Object.prototype.proto === null),返回 true

null 表示沒有對(duì)象丙躏,即該處不應(yīng)有值择示,所以 Object.prototype 沒有原型束凑,如圖:

prototype04.jpg

圖中這條藍(lán)色的線即是原型鏈晒旅,

最后補(bǔ)充三點(diǎn):

constructor:

function Person(){

}

var person = new Person();

console.log(Person === person.constructor);

原本 person 中沒有 constructor 屬性,當(dāng)不能讀取到 constructor 屬性時(shí)汪诉,會(huì)從 person 的原型中讀取废恋,所以指向構(gòu)造函數(shù) Person

proto

絕大部分瀏覽器支持這個(gè)非標(biāo)準(zhǔn)的方法訪問原型,然而它并不存在與 Person.prototype 中扒寄,實(shí)際上它來自 Object.prototype鱼鼓,當(dāng)使用 obj.proto時(shí),可以理解為返回來

Object.getPrototype(obj)

繼承:

前面說到该编,每個(gè)對(duì)象都會(huì)從原型繼承屬性迄本,但是引用《你不知道的 JS》中的話,繼承意味著復(fù)制操作课竣,然而 JS 默認(rèn)不會(huì)復(fù)制對(duì)象的屬性嘉赎,相反,JS 只是在兩個(gè)對(duì)象之間創(chuàng)建一個(gè)關(guān)聯(lián)于樟,這樣子一個(gè)對(duì)象就可以通過委托訪問另一個(gè)對(duì)象的屬性和函數(shù)公条,所以與其叫繼承,叫委托更合適迂曲。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末靶橱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌关霸,老刑警劉巖传黄,帶你破解...
    沈念sama閱讀 210,835評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異队寇,居然都是意外死亡尝江,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門英上,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炭序,“玉大人,你說我怎么就攤上這事苍日〔涯簦” “怎么了?”我有些...
    開封第一講書人閱讀 156,481評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵相恃,是天一觀的道長(zhǎng)辜纲。 經(jīng)常有香客問我,道長(zhǎng)拦耐,這世上最難降的妖魔是什么耕腾? 我笑而不...
    開封第一講書人閱讀 56,303評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮杀糯,結(jié)果婚禮上扫俺,老公的妹妹穿的比我還像新娘。我一直安慰自己固翰,他們只是感情好狼纬,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,375評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著骂际,像睡著了一般疗琉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上歉铝,一...
    開封第一講書人閱讀 49,729評(píng)論 1 289
  • 那天盈简,我揣著相機(jī)與錄音,去河邊找鬼太示。 笑死柠贤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的先匪。 我是一名探鬼主播种吸,決...
    沈念sama閱讀 38,877評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼呀非!你這毒婦竟也來了坚俗?” 一聲冷哼從身側(cè)響起镜盯,我...
    開封第一講書人閱讀 37,633評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎猖败,沒想到半個(gè)月后速缆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,088評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡恩闻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,443評(píng)論 2 326
  • 正文 我和宋清朗相戀三年艺糜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片幢尚。...
    茶點(diǎn)故事閱讀 38,563評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡破停,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尉剩,到底是詐尸還是另有隱情真慢,我是刑警寧澤,帶...
    沈念sama閱讀 34,251評(píng)論 4 328
  • 正文 年R本政府宣布理茎,位于F島的核電站黑界,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏皂林。R本人自食惡果不足惜朗鸠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,827評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望础倍。 院中可真熱鬧烛占,春花似錦、人聲如沸著隆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,712評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)美浦。三九已至,卻和暖如春项栏,著一層夾襖步出監(jiān)牢的瞬間浦辨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,943評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工沼沈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留流酬,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,240評(píng)論 2 360
  • 正文 我出身青樓列另,卻偏偏與公主長(zhǎng)得像芽腾,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子页衙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,435評(píng)論 2 348

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