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

您的位置:首頁技術文章
文章詳情頁

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

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

本文由葡萄城技術團隊原創并首發

轉載請注明出處:葡萄城官網

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

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

什么是原型?

JS中的對象包含了一個prototype的內部屬性,這個屬性所對應的就是該對象的原型。

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

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

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

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

這個 __proto__ 稱作 隱式原型。

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

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

這個prototype 稱作 顯式原型。

小結一下:

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

函數除了有_proto_屬性之外還擁有prototype屬性,我們借助構造函數來尋找二者之間的關系。如下圖:

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

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

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

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

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

a.__proto__.__proto__A.prototype.__proto__

3.實例對象a的隱式原型指向它構造函數的顯式原型,指向的意思是恒等于

a.__proto__ === A.prototype

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

什么是原型鏈?

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

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

2. 為什么 p.a 為undefined

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

如下圖所示

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

2. p.__proto__.constructor 返回的結果為構造函數Person

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

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

結合上面所講的顯式原型與隱式原型之間的關系,等同如下:

p.__proto__.__proto__ = Object.prototype

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

總結:

1. 查找屬性,如果本身沒有,則會去__proto__中查找,也就是構造函數的顯式原型中查找,如果構造函數的顯式原型中也沒有該屬性,因為構造函數的顯式原型也是對象,也有__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 只是一個指針,指向的是原型對象,但是這個原型對象并不特別,它也只是一個普通對象。假設說,這時候,我們讓 Person.prototype 不再指向最初的原型對象,而是另一個類 (Animal)的實例,情況會怎樣呢?

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

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

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

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

結語

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

以上就是一篇文章讓你搞懂JavaScript 原型和原型鏈的詳細內容,更多關于JavaScript 原型和原型鏈的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
91成人在线| 欧美va天堂| 蜜臀久久99精品久久久画质超高清| 欧美亚洲国产一区| 欧美日韩精品免费观看视频完整| 狠狠干综合网| 久久最新视频| 亚洲欧美网站在线观看| 日本成人在线视频网站| 国产亚洲欧美日韩精品一区二区三区| 国产精品一级| 国产精品二区影院| 精品国产亚洲一区二区三区在线 | 久久不见久久见免费视频7| 国产福利一区二区三区在线播放| 精品免费av| 99久久99久久精品国产片果冰| 亚洲精品va| 日韩有吗在线观看| 国产精品一区2区3区| 国产传媒在线观看| 日韩一级欧洲| 国产精品对白| 久久久久久久久久久妇女 | 在线手机中文字幕| 红桃视频欧美| 久久精品凹凸全集| 啪啪国产精品| 亚洲人成亚洲精品| 国产成人精品一区二区三区在线| 日本成人在线网站| 四虎国产精品免费观看| 99热免费精品| 国产精品www.| 国产亚洲福利| 国产精品hd| 一区在线免费观看| 国产精品毛片久久久| 日韩精品首页| 国产欧美日韩一级| 免费精品国产| 精品一区二区三区在线观看视频| 午夜av一区| 久久99视频| 日韩中文字幕亚洲一区二区va在线| 国产精品4hu.www| 日韩欧美少妇| 国产精品一区二区av日韩在线| 一区在线观看| 日韩在线观看| 国产欧美88| 免费av一区| 四虎8848精品成人免费网站| 91麻豆精品| 夜久久久久久| 福利片在线一区二区| 亚洲精品字幕| 亚洲成人免费| 亚洲欧洲美洲av| 青草综合视频| 亚洲欧美日韩国产一区二区| 国产精品亚洲二区| 久久亚洲色图| 五月天综合网站| 黄毛片在线观看| 久久99影视| 日韩专区视频网站| 午夜国产精品视频| 四虎884aa成人精品最新| 精品久久网站| 国产免费av一区二区三区| 男女男精品网站| 自由日本语亚洲人高潮| 日韩一区电影| 亚洲精品成人图区| 国产第一亚洲| 在线午夜精品| 激情综合网站| 香蕉精品久久| 成人欧美一区二区三区的电影| 你懂的亚洲视频| 麻豆国产精品视频| 国产精品宾馆| 久久久久九九精品影院| 国产欧美88| 国产亚洲欧美日韩精品一区二区三区 | 中文欧美日韩| 91九色精品| 亚洲成人三区| 老色鬼久久亚洲一区二区| 鲁大师影院一区二区三区| 中文一区在线| 男女男精品视频网| 亚洲精品九九| 国产日韩在线观看视频| 国产欧美综合一区二区三区| 日韩精品视频一区二区三区| 日韩av影院| 国产精品最新| 国产69精品久久| 日韩影院二区| 日韩高清欧美| 激情综合网站| 蜜臀91精品一区二区三区| 亚洲综合激情在线| 欧美日韩亚洲一区三区| 国产精品黄色| 日韩在线短视频| 精品一区毛片| 一本综合精品| 国产剧情一区二区在线观看| 国产极品模特精品一二| 精品成av人一区二区三区| 日韩av在线中文字幕| 日韩一区电影| 在线亚洲国产精品网站| 蘑菇福利视频一区播放| 日韩欧美精品一区二区综合视频| 91免费精品国偷自产在线在线| 国产精品亚洲欧美一级在线| 福利一区二区三区视频在线观看| 久久人人99| 亚洲精品麻豆| 麻豆国产一区| 成人精品中文字幕| 在线亚洲自拍| 国产亚洲精品美女久久久久久久久久| 九九99久久精品在免费线bt| 亚洲成人国产| 综合国产在线| 国产精品亚洲四区在线观看| 国产一区二区三区久久| 伊人久久国产| 日韩精品一区第一页| 国产亚洲久久| 亚洲91视频| 日韩精品福利一区二区三区| 成人在线视频区| 天堂va蜜桃一区二区三区| 国产精品香蕉| 午夜久久久久| 国产中文字幕一区二区三区| 国产亚洲一区在线| 久久99国产精品视频| 欧美特黄a级高清免费大片a级| 天海翼精品一区二区三区| 精品三级av| 香蕉久久国产| 国产精成人品2018| 欧美日韩国产亚洲一区| 久久av影院| 蜜桃视频在线观看一区| 国产精品毛片久久| 日韩在线视频一区二区三区| 日韩国产一区二区| 日韩三级精品| 亚洲精品网址| 国产suv精品一区二区四区视频 | 99久久久国产精品美女| 日韩精品免费一区二区夜夜嗨| 精品久久91| 亚洲精品美女| 99精品国产一区二区三区| 欧美性www| 最新日韩av| 久草免费在线视频| 国产日产高清欧美一区二区三区| 婷婷综合社区| 国产精品国产三级国产在线观看| 丝袜美腿亚洲一区二区图片| 精品国产午夜| 日韩av电影一区| 午夜欧美理论片| 午夜av不卡| 国产精品欧美在线观看| 国产精品av一区二区| 九九久久国产| 国产欧美自拍| 亚洲午夜国产成人| 欧美/亚洲一区| 在线一区av| 麻豆精品视频在线| 欧美在线不卡| 亚洲久久一区| 中文日韩在线| 欧美/亚洲一区| 欧美日韩精品免费观看视欧美高清免费大片 | 国产精品毛片在线| 日韩精品诱惑一区?区三区| 欧美片网站免费| 日韩精品一级| 最新国产精品视频| 视频一区二区三区中文字幕| 久久久久免费av| 91看片一区| 欧美国产偷国产精品三区| 国产福利亚洲| 国产精品资源| 欧美精品国产一区| 欧美日韩亚洲一区在线观看|