精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

圖解:什么是 JS 原型和原型鏈?

開發 前端
在我初學 JS 語言的繼承機制原型和原型鏈的時候,我一直理解不了這種設計機制,再加上之前原有對 Java繼承的理解,在學習 JS 繼承機制的設計上踩了一個大坑,很多知識點前期都是死記硬背,無法真正的理解它的設計思想。

 [[341466]]

本文轉載自微信公眾號「小鹿動畫學編程」,作者不甘平凡的碼農。轉載本文請聯系小鹿動畫學編程公眾號。  

寫在前邊[[341467]]

 

在我初學 JS 語言的繼承機制原型和原型鏈的時候,我一直理解不了這種設計機制,再加上之前原有對 Java繼承的理解,在學習 JS 繼承機制的設計上踩了一個大坑,很多知識點前期都是死記硬背,無法真正的理解它的設計思想。

JS 中的繼承機制思想可以說是學習 JS 的一個核心思想,更可以說是 JS 中的一個命脈,往往這些復雜、抽象的繼承關系,以及專業術語、代名詞確成為了困擾初學者的絆腳石。當我真正理解它的設計思想時,其實并沒有那么復雜,而且覺得非常簡單。

在寫這篇 JS 的原型和原型鏈的文章之前,我在谷歌搜索檢索了大量的高贊有關 JS 原型和原型鏈的文章,大部分都是圍繞著“是什么”來講的,導致部分初學者缺少對 JS 繼承的設計與實現的前后關聯性,還是很難準確的去理解。

我們先要明白,學習這塊內容知識要知道設計者“ 為什么這樣做 ” 遠比 “怎么做的” 重要的多這才是掌握這部分內容的關鍵。

今天小鹿對 JS 的繼承機制要做一個系統的總結,從設計者的角度出發,將復雜的設計思想用動畫呈現,將零碎的知識點體系化,爭取讓你一文搞懂 JS 的繼承機制思想(原型和原型鏈)。

思維導圖

 

1.JS 的發展史

要想貫徹 JS 的核心設計思想,我們要從 JS 的誕生說起。

1.1 為什么會誕生 JavaScript ?

相對比較成熟的瀏覽器是由網景公司發布的,早些年間,瀏覽器只能瀏覽網頁內容,而不能進行用戶交互。比如我們登錄輸入用戶名和密碼,在瀏覽器是不能進行判斷用戶是否真正輸入了,而是通過服務器來判斷,如果沒有輸入,返回錯誤提示用戶,這種設計非常的浪費時間和服務器資源。

 

為了解決這個問題,網景公司需要開發一種運行在瀏覽器中的腳本語言,用來簡單的做用戶輸入校驗等操作。

當時最流行的語言是面向對象的Java編程語言 ,網景公司為了能夠借助 Java將瀏覽器腳本語言流傳開,所以起名 JavaScript。其實兩者沒有任何的關系。

1.2 存在的問題

JS 中的數據類型設計受當時 Java流行的影響,都是對象類型,這時候就遇到問題了,有對象必然涉及到繼承機制,那么 JS 的繼承機制要設計成 Java一樣呢?還是另有設計思想?

2.JS 繼承的設計思想

JS 的開發者想如果設計成像 Java一樣有“類”的概念豈不是和 Java一樣成為了一種完全面向對象的編程語言了?最后決定自己設計一種繼承機制,但是它的設計思想還是采用了 Java的一些特性。

2.1 生成對象

通常 Java 生成對象是通過 new 的方式,通過類生成一個實例對象的過程。但是 JS 中并沒有類,那 JS 的設計者要怎么做?

 

他找到了 Java 和 JS 的共同點就是兩者都有構造函數, Java的 new 的過程內部其實調用了構造函數。但是 JS 是沒有“類”的概念的,于是 JS 就把new 一個“類”設計成了 new 一個構造函數,于是構造函數成為了一個實例對象的原型對象。

 

3.為什么要設計原型對象?

上述這樣的原型設計有一個致命的缺點就是無法共享公共屬性。

因為我們知道,每 new 一個對象,生成的實例是兩個不同的對象。所以共有的屬性也不是共享的。

 

所以要設計一個對象專門用來存儲對象共享的屬性,那么我們叫它「原型對象」。

4.什么是原型對象?

要想讓構造函數生成的所有實例對象都能夠共享屬性,那么我們就給構造函數加一個屬性叫做prototype,用來指向原型對象,我們把所有實例對象共享的屬性和方法都放在這個構造函數的prototype屬性指向的原型對象中,不需要共享的屬性和方法放在構造函數中。

這里有一點疑惑就是,我們知道對象可以設置屬性,函數也可以設置屬性嗎?對于初學者來說是比較懵逼的,那我們可以稍微的簡單說一下:

JavaScript 中的函數擁有對象的所有能力,也因此可被稱作為任意其他類型對象來對待。當我們說函數是第一類對象的時候,就是說函數也能夠對象的一些功能,比如添加屬性,函數當做參數傳遞等。

所以說,實例對象一旦通過構造函數創建,就會自動給實例對象賦值上原型對象上共享的屬性或方法。說清楚一點就是該對象屬性都指向了原型對象的屬性值。

 

5.對象和函數在原型鏈關系?

 

上述的圖反映了對象以及函數在原型鏈中的關系,如果你覺的上邊的這張圖看懵逼了,沒關系,我剛開始學習原型鏈的時候,根本不知道上邊這是什么“清明上河圖”,小鹿下面通過一步步的拆分講解,看這張圖就非常簡單,沒錯,非常簡單。

我們文章的開頭也說了什么是原型對象,說白了就是構造函數的一個 prototype屬性,這個屬性就指向原型對象。

其實我們其中一些連接屬性沒有講到,只講到了prototype屬性,下面一張圖來將剩下的屬性補充完整,我們只要把這張圖印到大腦中就可以了。

 

我們來分析一下上圖,首先我們先要聲明一個狗的構造函數,定義其名字和體重屬性(私有屬性),同時每個構造函數我們上邊講到了,都會有一個prototype屬性。

 

這個prototype指向的就是原型對象,原型對象放的就是對象共享的屬性。但是注意,原型對象里有一個constructor屬性,這個屬性又指回了構造函數。

 

我們通過 new 構造函數生成兩個狗的對象實例,一個叫豆豆,一個叫貝貝,這兩個是兩個不同的對象,名字體重都不相同,但是他們會共享原型對象上的屬性 type,它們共有的屬性都是犬類。

 

在 JS 所有對象中,只要是對象,都會有一個內置屬性叫做_proto_,而且這個屬性是系統自動生成的,只要你創建一個對象,這個對象就有這個屬性。這個_proto_屬性指向的是原型對象。

通過上邊的分布講解,我們明白了構造函數與對象實例以及原型對象的關系。

總結為一句話為:

構造函數的 prototype 指向原型對象,原型對象有一個 constructor 屬性指回構造函數,每個構造函數生成的實例對象都有一個 _proto_ 屬性,這個屬性指向原型對象。

沒錯,原型就是這么簡單。但是你會發現,原型也是對象呀,你說只要是對象都會有一個_proto_屬性指向自身構造函數的原型對象。

沒錯,要想知道原型對象的_proto_屬性指向誰,就要知道是哪個構造函數創建了原型對象?

我們知道,所有的 JS 對象的都是繼承了一個叫做 Object 的對象。可以理解為Object 構造函數創造了這個萬物,他們的關系如下,和上邊是同樣的道理,上邊總結的那句話好好理解一下。

 

但是上圖中會有一個疑問,Object 構造函數原型對象的也是對象,它肯定也有一個_proto_屬性,為什么會指向 null 呢?

我們在拿上述總結的那句話,_proto_屬性指向的是自身構造函數的原型對象,自身的構造函數是誰?是 Object 構造函數,那 Object構造函數的原型是誰?當然是本身(如圖),所以把_proto_指向了null。

上邊的關系如果不仔細整理的話確實很亂,尤其是對于初學者,但是如果像小鹿這樣已整理,再亂的關系把它安排的井井有條,沒有理解,就多看幾篇文章。

6.原型鏈

我們還有一個問題沒有解決就是原型鏈?既然我么你知道什么是原型了,原型鏈是什么?顧名思義,肯定是一條鏈,既然每個對象都有一個_proto_屬性指向原型對象,那么原型對象也有_proto_指向原型對象的原型對象,直到指向上圖中的null,這才到達原型鏈的頂端。

不要忘了,上邊那種圖我們還沒有把它理解,我們把圖自上而下理解。

 

第一張圖分解,上邊小鹿畫的圖的關系和這個一樣的,仔細對比一下,很簡單,第一張圖就這么解決了。

 

我們繼續向下分割,看第二張圖。

 

第二張圖怎么還是那么眼熟呢,這不是小鹿上邊分析的 Object 的關系圖嗎?對的,沒錯。

 

第三張圖,稍微繞個彎子,但是換湯不換藥呀,聽小鹿分析來。

 

看著還是眼熟,只不過把function換成了Function,f 變成了大寫的 F,這里涉及到一個知識點就是,在 JS 中,所有的 function函數都是由Function繼承來的,可以說是Function是所有 function的祖宗。

那Function是由誰生產來的?我們看到圖中的Function函數有_proto_屬性了,而且屬性指向自己的原型對象,那不就是自己繁衍自己嗎?可以這么理解。

小結

 

[[341467]]

 

這里我們在縱觀全圖,總結幾條定義你比對著圖去找。

1、所有的實例的_proto_都指向該構造函數的原型對象(prototype)。

2、所有的函數(包括構造函數)是Function的實例,所以所有函數的 _proto_的都指向Function的原型對象。

3、所有的原型對象(包括 Function的原型對象)都是Object的實例,所以_proto_都指向 Object(構造函數)的原型對象。而 Object構造函數的 _proto_指向 null。

4、Function構造函數本身就是 Function 的實例,所以_proto_指向Function的原型對象。

全篇文章的精華都在最后的總結部分,前邊的所有分解講解是為了讓你理解這些函數對象以及原型對象之間的關系,這關系都是固定的,誰指向誰,都是寫死額,只要你記住了他們的關系,這張圖就理解的差不多了,能夠理解完這張圖,你的原型和原型鏈已經了解的很扎實了,但是還需要做一些面試題鞏固一下。

 

責任編輯:武曉燕 來源: 小鹿動畫學編程
相關推薦

2022-06-20 09:22:55

js原型鏈前端

2016-06-07 14:28:39

Javascript原型

2019-02-27 16:00:48

JS原型原型鏈對象

2020-02-20 14:00:15

JavaScript原型原型鏈

2020-10-20 08:35:34

JS基礎進階

2022-05-26 23:14:26

原型原型鏈JS繼承

2019-11-21 17:46:35

物聯網智能照明3D打印

2012-01-05 15:07:11

JavaScript

2012-11-08 10:40:47

JavaScript原型鏈

2017-04-07 11:15:49

原型鏈原型Javascript

2023-08-28 07:12:54

2022-05-26 09:20:01

JavaScript原型原型鏈

2021-05-28 08:01:00

JS原型概念

2022-03-29 09:15:55

Javascript函數屬性

2023-04-07 09:07:11

2017-05-05 10:31:35

JavaScriptprototype__proto__

2016-12-27 09:10:29

JavaScript原型鏈繼承

2024-08-09 12:44:45

JavaScript原型鏈鏈條

2016-05-06 14:02:18

JavaScript原型鏈

2022-04-14 20:43:24

JavaScript原型鏈
點贊
收藏

51CTO技術棧公眾號

久操免费在线视频| 蜜臀一区二区三区精品免费视频 | 国产午夜福利一区| 欧美aaaaaa| 亚洲一区二区三区四区在线免费观看 | 永久免费精品视频网站| 国产理论视频在线观看| 亚洲高清成人| 中文字幕精品一区久久久久| 制服下的诱惑暮生| 色综合一本到久久亚洲91| 亚洲品质自拍视频网站| 久久久国产精品一区二区三区| 中文字幕乱码一区二区 | 青青青免费在线| yourporn在线观看视频| 国产激情91久久精品导航 | 在线免费成人| 午夜电影网一区| 在线观看欧美亚洲| 六十路在线观看| 成人性视频免费网站| 国产精品一区av| 国产做受高潮漫动| 亚洲最大av| 伊人久久久久久久久久| www.88av| 午夜日韩影院| 欧美日韩国产欧美日美国产精品| 日日橹狠狠爱欧美超碰| a天堂中文在线官网在线| 国产日韩高清在线| 久久国产精品一区二区三区 | 日韩电影中文字幕在线| 99精品999| 小黄鸭精品aⅴ导航网站入口| 一片黄亚洲嫩模| 一区二区三区四区五区精品| 天天操天天干天天| 成人免费黄色在线| 91麻豆蜜桃| 国产又粗又猛又爽又黄视频| 日韩福利电影在线| 韩曰欧美视频免费观看| 91国产成人在线| 在线国产99| 92国产在线视频| 久久久久久久久久电影| 国产精品乱码视频| 丰满熟妇人妻中文字幕| 国产精品自在在线| 91久久精品国产| 亚洲怡红院av| 美腿丝袜在线亚洲一区| 国产精品久久久久77777| 国产又黄又猛又粗又爽| 亚洲一区二区成人| 欧洲中文字幕国产精品| 日本中文字幕在线| 午夜亚洲福利在线老司机| 久久久在线视频| 欧美精品一级片| 欧美精品一区二区三区久久久竹菊| 久久天天躁狠狠躁夜夜躁| 91香蕉一区二区三区在线观看| 成人羞羞网站入口| 日韩在线视频一区| 欧美丰满熟妇bbbbbb| 亚洲天天影视网| 欧美日韩成人免费| 国产成人精品av久久| 99成人精品| 欧美做爰性生交视频| 99re这里只有精品在线| 美女视频一区免费观看| 国产精品都在这里| 97精品久久人人爽人人爽| 久99久精品视频免费观看| 91久久国产精品91久久性色| 国产夫妻性生活视频| 国产成a人亚洲| 久久99精品久久久久子伦| 欧美日韩视频精品二区| 国产精品亲子伦对白| 好色先生视频污| wwwwxxxx在线观看| 日韩欧美亚洲范冰冰与中字| 午夜久久久精品| 懂色av色香蕉一区二区蜜桃| 欧美大肚乱孕交hd孕妇| 在线免费观看污视频| 精品视频免费| 久久亚洲影音av资源网| 日本熟妇乱子伦xxxx| 丝袜亚洲精品中文字幕一区| 91久久中文字幕| 人妻少妇精品无码专区| 国产日产精品一区| 激情视频小说图片| xx欧美视频| 欧美一区二区三区在线视频| 野花社区视频在线观看| 欧美激情理论| 69视频在线播放| 一级黄色a毛片| 99九九99九九九视频精品| 天堂资源在线亚洲视频| 欧美韩日亚洲| 欧美日韩一区中文字幕| 精品1卡二卡三卡四卡老狼| 清纯唯美综合亚洲| 97国产精品视频人人做人人爱| 国产精品51麻豆cm传媒 | 精品国产老师黑色丝袜高跟鞋| 国产一二三四在线视频| 国产精品久久久久av蜜臀| 中文字幕一区电影| 一区二区三区视频免费看| 久久精品久久精品| 久久青青草综合| 亚洲夜夜综合| 欧美日韩一二三| av无码一区二区三区| 久久久久久久久久久久久久| 日韩av免费在线| 成人午夜免费在线观看| 中文字幕一区二区三区在线观看| 日本wwww视频| 中文字幕亚洲在线观看| 色综久久综合桃花网| 国产suv精品一区二区33| proumb性欧美在线观看| 亚洲色婷婷久久精品av蜜桃| 色成人综合网| 在线看欧美日韩| youjizz在线视频| www.激情成人| 精品少妇在线视频| 亚洲精品在线国产| 久久夜色精品国产| 一本色道久久综合精品婷婷| 中文字幕+乱码+中文字幕一区| av免费中文字幕| 色婷婷久久久| 4388成人网| 亚洲 欧美 激情 小说 另类| 亚洲地区一二三色| 影音先锋资源av| 欧美视频官网| 成人动漫视频在线观看完整版| 黄色网址在线免费观看| 欧美精品亚洲二区| 多男操一女视频| 久久精品国产99久久6| 亚洲国产一区二区精品视频| 成人免费网站www网站高清| 亚洲欧美在线磁力| 天干夜夜爽爽日日日日| 国产无人区一区二区三区| 日韩中文字幕组| 国产一区二区三区网| 国产精品福利久久久| av在线免费观看网站| 精品视频全国免费看| 99热这里只有精品4| 精品亚洲国产成人av制服丝袜| 青春草在线视频免费观看| 99久热在线精品视频观看| 久久天天躁狠狠躁夜夜躁| 亚洲经典一区二区| 精品久久久一区| 亚洲精品国产精品国自产网站| 蜜乳av一区二区三区| 糖心vlog在线免费观看| 懂色av一区二区| 欧美一区二区三区……| 91在线直播| 欧美一区三区二区| 日本一区二区不卡在线| 国产亚洲精品资源在线26u| 99re精彩视频| 国产一区激情| 欧美在线一二三区| 99综合久久| 97视频在线观看视频免费视频 | 97在线播放免费观看| 亚洲精品亚洲人成人网 | 国产精品午夜在线| 91免费视频污| 国产精品毛片| 一区二区三区在线视频看| 亚洲第一二区| 国产成人综合精品| 成人在线影视| 亚洲欧美日韩国产精品| 国产99视频在线| 色婷婷综合久色| 国产人妻精品一区二区三区不卡| av综合在线播放| 伊人国产在线视频| 亚洲麻豆一区| 综合久久国产| 伊甸园亚洲一区| 91视频免费在线| 免费电影日韩网站| 九九精品视频在线| 福利小视频在线观看| 精品粉嫩aⅴ一区二区三区四区| 五月天婷婷导航| 一区二区三区中文字幕在线观看| 野外性满足hd| 国产99久久久国产精品潘金网站| 无码日韩人妻精品久久蜜桃| 雨宫琴音一区二区在线| 亚洲综合首页| 你懂的一区二区三区| 5566av亚洲| 在线观看亚洲精品福利片| 日本亚洲欧洲色| 多野结衣av一区| 欧美高清电影在线看| 欧美私人网站| 在线观看日韩视频| 日本亚洲一区| 精品国产乱码久久久久久1区2区| 国产精品羞羞答答在线| 在线观看日韩一区| 国产综合精品视频| 亚洲国产精品久久久久秋霞影院 | 国产免费一区二区三区最新6| 美女在线一区二区| 日本女优爱爱视频| 免费视频一区二区三区在线观看| 激情六月天婷婷| 亚洲成人一区| 一区二区三区四区视频在线观看| 国产一区二区精品久| 久久涩涩网站| 精品国产导航| 成人毛片网站| 一区二区在线免费播放| 91青青草免费观看| 久久九九精品视频| 亚洲综合第一页| 免费观看在线一区二区三区| 成人午夜在线观看| 国产日韩在线观看视频| 91久久久久久久一区二区| 日本免费成人| 国产欧美日韩精品丝袜高跟鞋| 亚洲午夜激情免费视频| 亚洲国产精品v| 欧美日韩性生活视频| 女教师高潮黄又色视频| 精品伊人久久久久7777人| 一路向西2在线观看| 蓝色福利精品导航| 久久精品国产露脸对白| 国产在线日韩欧美| 1314成人网| 国产精品一级二级三级| 中文字幕乱妇无码av在线| 国产iv一区二区三区| 你懂的在线观看网站| 97精品国产露脸对白| 精品人妻一区二区三区香蕉| 久久久亚洲国产美女国产盗摄 | 欧美亚洲人成在线| 91精品在线播放| 99亚洲乱人伦aⅴ精品| 国产欧美日韩综合精品二区| 日韩欧美天堂| 三区精品视频观看| 婷婷精品进入| 男人天堂av片| 六月婷婷一区| 亚洲五月激情网| 成人激情综合网站| 欧美老熟妇乱大交xxxxx| 亚洲国产精品精华液ab| 伊人久久久久久久久久久久久久| 亚洲精品五月天| 久久久久久久久久久久久久av| 在线看不卡av| av在线资源观看| 日韩h在线观看| 99视频在线观看地址| 欧美日韩成人精品| 欧美日韩不卡| 99久久无色码| 免费短视频成人日韩| 制服诱惑一区| 国产日本精品| 国产福利在线免费| 成人h精品动漫一区二区三区| 好吊视频在线观看| 亚洲欧美日本韩国| 亚洲天堂男人av| 日韩欧美视频一区| 国产美女性感在线观看懂色av| 欧美成人精品影院| 色综合一本到久久亚洲91| 999热视频在线观看| 欧美色图一区| 国产极品粉嫩福利姬萌白酱| 精品亚洲porn| 国产精品亚洲无码| 亚洲国产欧美一区二区三区丁香婷| 国产情侣免费视频| 日韩av一区在线| 3d玉蒲团在线观看| 国产精品久久不能| 日韩精品欧美大片| 日韩精品免费一区| 青青草成人在线观看| 双性尿奴穿贞c带憋尿| 一区二区欧美视频| 国产精品久久综合青草亚洲AV| 国产午夜精品久久久| 里番在线播放| 91亚洲国产成人精品性色| 少妇精品久久久一区二区| 成品人视频ww入口| 国产麻豆视频精品| 久久精品色妇熟妇丰满人妻| 蘑菇福利视频一区播放| 这里只有视频精品| 国产经典三级在线| 91黄在线观看| 久久久久国产精品| 少妇网站在线观看| 日本一区二区三区高清不卡| 亚洲综合久久网| 亚洲免费电影一区| 欧美aaaaa性bbbbb小妇| 国产伦理一区二区三区| 欧美日本三区| 韩国三级与黑人| 亚洲免费在线看| 国产美女三级无套内谢| 色偷偷噜噜噜亚洲男人| 99久久久国产精品免费调教网站| 欧美男人的天堂| 久久激情综合| xxxx日本黄色| 91久久精品一区二区| 免费成人av电影| 国产97色在线|日韩| 久久av综合| av免费在线播放网站| 国产亚洲精品资源在线26u| 国产精品久久久久久久久夜色| 亚洲情综合五月天| 欧美www.| 亚洲精品中文字幕在线| 久久91精品国产91久久小草| 中文字幕一区二区三区有限公司| 日韩最新av| 人妻无码一区二区三区四区| 粉嫩欧美一区二区三区高清影视 | 精品久久久久一区二区| 亚洲电影激情视频网站| 水莓100国产免费av在线播放| 欧美一级片一区| 精品国产欧美日韩| 午夜视频在线网站| 一区二区三区在线播放| 国模私拍视频在线| 国产91免费看片| 久久在线电影| 丰满少妇xbxb毛片日本| 欧美日韩激情视频8区| 成全电影播放在线观看国语| 91精品国产综合久久久久久久久| 一区二区三区午夜探花| 亚洲麻豆一区二区三区| 色婷婷久久久久swag精品| 男人天堂久久久| 国产精品二区三区| 久久成人免费| 在线看的片片片免费| 亚洲精品国产免费| 国产精品麻豆成人av电影艾秋| 黄色高清视频网站| 99久久精品国产网站| 亚洲天天综合网| 久久久噜噜噜久久久| 精品国产一区二区三区香蕉沈先生| 日本黄色福利视频| 午夜影视日本亚洲欧洲精品| 第一页在线观看| www日韩av| 日韩国产精品91| 日韩欧美亚洲一区二区三区| 一区三区二区视频| 99ri日韩精品视频| 亚洲精品视频导航| 亚洲一区av在线| 亚洲搞黄视频| 久久亚裔精品欧美|