日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

一篇文章讓你搞懂JavaScript 原型和原型鏈

瀏覽:61日期:2023-10-07 14:32:33

本文由葡萄城技術(shù)團隊原創(chuàng)并首發(fā)

轉(zhuǎn)載請注明出處:葡萄城官網(wǎng)

與多數(shù)面向?qū)ο蟮拈_發(fā)語言有所不同,雖然JavaScript沒有引入類似類的概念(ES6已經(jīng)引入了class語法糖),但它仍然能夠大量的使用對象,那么如何將所有對象聯(lián)系起來就成了問題。于是就有了本文中我們要講到的原型和原型鏈的概念。

原型和原型鏈作為深入學(xué)習(xí)JavaScript最重要的概念之一,如果掌握它了后,弄清楚例如:JavaScript的繼承,new關(guān)鍵字的原來、封裝及優(yōu)化等概念將變得不在話下,那么下面我們開始關(guān)于原型和原型鏈的介紹。

什么是原型?

JS中的對象包含了一個prototype的內(nèi)部屬性,這個屬性所對應(yīng)的就是該對象的原型。

我們先看下圖:a、b、c 分別為數(shù)組、對象、函數(shù)。

一篇文章讓你搞懂JavaScript 原型和原型鏈

可以看到,三者都有一個屬性:__proto__

一篇文章讓你搞懂JavaScript 原型和原型鏈

這個 __proto__ 稱作 隱式原型。

除此之外,c還有一個屬性:prototype

一篇文章讓你搞懂JavaScript 原型和原型鏈

這個prototype 稱作 顯式原型。

小結(jié)一下:

所有引用類型(函數(shù),數(shù)組,對象)都擁有__proto__屬性(隱式原型) 所有函數(shù)除了有_proto_屬性之外還擁有prototype屬性(顯式原型) 原型對象:每創(chuàng)建一個函數(shù),該函數(shù)會自動帶有一個prototype屬性,該屬性是一個指針,指向了一個對象,我們稱之為原型對象。

函數(shù)除了有_proto_屬性之外還擁有prototype屬性,我們借助構(gòu)造函數(shù)來尋找二者之間的關(guān)系。如下圖:

一篇文章讓你搞懂JavaScript 原型和原型鏈

一篇文章讓你搞懂JavaScript 原型和原型鏈

總結(jié)如下(結(jié)合上圖更容易理解):

1. 實例對象a只有__proto__(隱式原型),構(gòu)造函數(shù)既有 __proto__(隱式原型)也有prototype(顯式原型)

2. __proto__ 和 prototype 都是一個對象,既然是對象,就表示他們也有一個 __proto__

a.__proto__.__proto__A.prototype.__proto__

3.實例對象a的隱式原型指向它構(gòu)造函數(shù)的顯式原型,指向的意思是恒等于

a.__proto__ === A.prototype

4. 當調(diào)用某種方法或查找某種屬性時,首先會在自身調(diào)用和查找,如果自身并沒有該屬性或方法,則會去它的__proto__屬性中調(diào)用查找,也就是它構(gòu)造函數(shù)的prototype中調(diào)用查找。

什么是原型鏈?

先看下圖,提出一個問題:

1. 在 Object的顯式原型添加屬性b,為什么 示例對象p 能使用此屬性呢? p.b = b

2. 為什么 p.a 為undefined

一篇文章讓你搞懂JavaScript 原型和原型鏈

如下圖所示

1. 實例對象p的隱式原型(__proto__)是一個對象,有兩個屬性值:constructor 和 __proto__

2. p.__proto__.constructor 返回的結(jié)果為構(gòu)造函數(shù)Person

3. p.__proto__.__proto__ .constructor 返回的結(jié)果為Object()函數(shù)

一篇文章讓你搞懂JavaScript 原型和原型鏈

結(jié)合上面所講的顯式原型與隱式原型之間的關(guān)系,等同如下:

p.__proto__.__proto__ = Object.prototype

所以p.b打印結(jié)果為b,p沒有b屬性,會一直通過__proto__向上查找,最后當查找到Object.prototype時找到,最后打印出b,向上查找過程中,得到的是Object.prototype,而不是Function.prototype,找不到a屬性,所以結(jié)果為undefined,這就是 原型鏈,通過__proto__向上進行查找,最終到null結(jié)束。

總結(jié):

1. 查找屬性,如果本身沒有,則會去__proto__中查找,也就是構(gòu)造函數(shù)的顯式原型中查找,如果構(gòu)造函數(shù)的顯式原型中也沒有該屬性,因為構(gòu)造函數(shù)的顯式原型也是對象,也有__proto__,那么會去它的顯式原型中查找,一直到null,如果沒有則返回undefined

2. p.__proto__.constructor == function Person(){}

3. p.___proto__.__proto__== Object.prototype

4. p.___proto__.__proto__.__proto__== Object.prototype.__proto__ == null

5. 通過__proto__形成原型鏈而非protrotype

一篇文章讓你搞懂JavaScript 原型和原型鏈

什么是原型繼承?

Person.prototype 只是一個指針,指向的是原型對象,但是這個原型對象并不特別,它也只是一個普通對象。假設(shè)說,這時候,我們讓 Person.prototype 不再指向最初的原型對象,而是另一個類 (Animal)的實例,情況會怎樣呢?

一篇文章讓你搞懂JavaScript 原型和原型鏈

執(zhí)行該代碼 Person.prototype = new Animal() 后,Person的prototype指針指向發(fā)生了變化,指向了一個 Animal 實例。

當 p 去訪問 address 屬性時,js會先在 p 的實例屬性中查找,發(fā)現(xiàn)找不到后,就會去 Person 的原型對象上 查找。因為Person的原型對象已經(jīng)被我們換成一個animal實例,所以就會先找animal實例的屬性,當發(fā)現(xiàn)還是沒有 address屬性,就會去Animal的原型對象上查找,最終找到。

這就說明,我們可以通過原型鏈的方式,實現(xiàn) Person 繼承 Animal 的所有屬性和方法。

結(jié)語

看到這,相信大家對原型和原型鏈的概念應(yīng)該已經(jīng)有了一定了解了,如果仍然不太理解,也不用氣餒,因為閉包及原型鏈是JavaScript最難理解的幾部分。相信之后在不斷的開發(fā)實踐中會使你理解的更為透徹,多學(xué)習(xí)多思考才能更快掌握。如果大家有任何反饋和問題,也歡迎通過評論區(qū)告訴我,謝謝。

以上就是一篇文章讓你搞懂JavaScript 原型和原型鏈的詳細內(nèi)容,更多關(guān)于JavaScript 原型和原型鏈的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日韩四区| 亚洲女同中文字幕| 视频一区欧美精品| 欧美另类专区| 黄色成人精品网站| 亚洲欧美日本国产专区一区| 亚洲在线国产日韩欧美| 视频在线在亚洲| 在线精品福利| 91福利精品在线观看| 国产亚洲人成a在线v网站| 国产精品亚洲产品| 精品久久在线| 欧美aⅴ一区二区三区视频| 久久精品一区二区国产| 国产黄大片在线观看| 亚洲性色av| 五月天久久网站| 男人操女人的视频在线观看欧美| 久久亚洲视频| 欧美午夜三级| 精品国产一区二区三区2021| 裤袜国产欧美精品一区| 欧美日韩免费观看一区=区三区| 国产亚洲福利| 日韩激情中文字幕| 国产精品a久久久久| 91亚洲国产| 久久九九电影| 男女男精品视频网| 国产欧美二区| 色在线中文字幕| 99视频+国产日韩欧美| 亚洲精品欧美| 国产精品三p一区二区| yellow在线观看网址| 久久影院一区| 亚洲欧美不卡| 日韩高清三区| 精品免费视频| 亚洲精品1区2区| 日韩在线观看中文字幕| 久久这里只有| 91亚洲国产| 久久亚洲图片| 国产一区二区三区精品在线观看| 不卡在线一区二区| 日韩中文字幕| 欧美男人天堂| 日本不卡高清| 秋霞国产精品| 亚洲+小说+欧美+激情+另类| 久久免费福利| 国产视频一区在线观看一区免费| 欧美在线看片| 欧美日韩精品一区二区视频| 91国内精品| 91精品一区二区三区综合在线爱 | 欧美91福利在线观看| 亚洲欧洲国产精品一区| 中文字幕在线高清| 天海翼亚洲一区二区三区| 国产一区福利| 亚洲制服一区| 日韩精品第一区| 日本成人一区二区| 亚洲天堂黄色| 久久久亚洲欧洲日产| 国产一区二区精品| 另类专区亚洲| 婷婷亚洲精品| 久久人人精品| 久久精品国产成人一区二区三区| 欧美日韩日本国产亚洲在线 | 9久re热视频在线精品| 国产精东传媒成人av电影| 精品一区亚洲| 久久久久久婷| 青青草国产精品亚洲专区无| 欧美va亚洲va日韩∨a综合色| 国产精品3区| 亚洲精品日韩久久| 日韩一区二区三区免费播放| 欧美一区不卡| 亚洲自拍另类| 91tv亚洲精品香蕉国产一区| 国产精品sss在线观看av| 亚洲午夜免费| 午夜精品亚洲| 三级精品视频| 精品久久一区| 国产美女久久| 亚洲精品美女91| 99riav国产精品| 四虎4545www国产精品| 国产精品99在线观看| 国产精品一区二区精品 | 97成人超碰| 综合五月婷婷| 亚洲一区二区动漫| 亚洲视频综合| 色婷婷精品视频| 91欧美在线| 精品一区视频| 麻豆久久一区| 国产精品久久久久久av公交车| 亚洲人妖在线| 久久电影一区| 日韩一区二区免费看| 久久高清精品| 久久精品一区二区不卡| 精品少妇一区| 黄色精品视频| 国产成人精品一区二区三区免费 | 欧美在线资源| 偷拍欧美精品| 一级欧洲+日本+国产| 欧美综合另类| 美女网站一区| 午夜影院欧美| 亚洲免费黄色| 欧美午夜不卡影院在线观看完整版免费| 日韩精品网站| 久久激情一区| 午夜欧美理论片| 久久www成人_看片免费不卡| 日韩中文字幕亚洲一区二区va在线| 久久99伊人| 日韩动漫一区| 免费日韩成人| 深夜福利视频一区二区| 久久久男人天堂| 日韩在线综合| 亚洲国产日韩欧美在线| 美女精品网站| 日韩和欧美一区二区| 日本欧美在线看| 亚洲精品看片| 国产精品成人国产| 国产成人精品福利| 在线看片国产福利你懂的| 欧美影院三区| 免费在线观看视频一区| 日韩动漫一区| 加勒比视频一区| 欧美天堂视频| 亚洲中午字幕| 国产欧美日韩亚洲一区二区三区| 精品伊人久久久| se01亚洲视频| 国产亚洲精品久久久久婷婷瑜伽| 免费视频一区二区| 亚洲精品裸体| 久久久国产精品网站| 黄色在线网站噜噜噜| 午夜久久福利| 国产亚洲字幕| 日韩欧美一区二区三区免费观看| 免费av一区| 日韩二区三区在线观看| 国产在线日韩精品| 一区二区视频欧美| 日韩不卡手机在线v区| 国产精品成久久久久| 99精品99| 国产伦理久久久久久妇女| 久久精品国产网站| 亚洲精品国产偷自在线观看| 91麻豆精品激情在线观看最新| 成人精品动漫一区二区三区| 国产一区视频在线观看免费| 奇米狠狠一区二区三区| 色黄视频在线观看| 亚洲精品美女91| 亚洲一区资源| 免费国产亚洲视频| 精品国产一区二区三区性色av| 精品一区在线| 欧美综合精品| av高清一区| 亚洲精品亚洲人成在线观看| 韩日一区二区| 视频一区国产视频| 精品中文字幕一区二区三区| 男人天堂欧美日韩| 国产一区二区三区久久| 蜜桃视频在线观看一区| 一区二区三区四区日本视频| 日韩欧美中文在线观看| 色乱码一区二区三区网站| 日韩中文字幕区一区有砖一区 | 国产欧美日韩影院| 亚洲国产成人精品女人| 欧美国产极品| 蘑菇福利视频一区播放| 精品高清久久| 天堂精品久久久久| 99精品视频精品精品视频| 国产调教精品| 最新亚洲激情|