摘要:它指向構(gòu)造函數(shù)的原型對(duì)象這是原型對(duì)象上的一個(gè)指向構(gòu)造函數(shù)的屬性。先看代碼的構(gòu)造函數(shù)創(chuàng)建一個(gè)的實(shí)例,小豬佩奇敲黑板,劃重點(diǎn),理解這一句整個(gè)問題的關(guān)鍵,請(qǐng)多重復(fù)幾遍。也就是說小豬佩奇的原型,就是從繼承來的寫成代碼就是這個(gè)樣子。
??沒錯(cuò),我就是標(biāo)題黨!你已經(jīng)成功被我騙進(jìn)來了。來都來了,那就聊聊再走唄!接下來就聽我一本正經(jīng)地跟你說道說道。
??Javascript的原型是這門語言的一個(gè)重點(diǎn)和難點(diǎn)。看過很多大佬寫的解釋Javascript原型的文章,但是很多對(duì)于初學(xué)者其實(shí)不是很友好,看完之后還是云里霧里。我雖然不敢說能把這個(gè)東西解釋的很清楚,但是作為一個(gè)前端菜鳥,我可能更知道大家在讀文章的時(shí)候會(huì)卡在哪一步,所以希望本文能夠幫助到大家。
??在文章開始,我先明確幾個(gè)概念,這里如果你覺得不好理解,就先牢牢地記住它,然后繼續(xù)往下閱讀,讀完你就會(huì)豁然開朗,相信我!另外,一定要每行每字去讀,勿跳著讀,博主就犯過這樣的錯(cuò)誤,導(dǎo)致越讀越糊涂,我這里也盡量壓縮字?jǐn)?shù),保證你讀的每個(gè)字都是有用的。答:“你都忽悠半天了趕緊開始吧!”
prototype :每個(gè)函數(shù)都會(huì)有這個(gè)屬性,這里強(qiáng)調(diào),是函數(shù),普通對(duì)象是沒有這個(gè)屬性的(這里為什么說普通對(duì)象呢,因?yàn)镴S里面,一切皆為對(duì)象,所以這里的普通對(duì)象不包括函數(shù)對(duì)象)。它是構(gòu)造函數(shù)的原型對(duì)象;
__proto__ :每個(gè)對(duì)象都有這個(gè)屬性,,這里強(qiáng)調(diào),是對(duì)象,同樣,因?yàn)楹瘮?shù)也是對(duì)象,所以函數(shù)也有這個(gè)屬性。它指向構(gòu)造函數(shù)的原型對(duì)象;
constructor :這是原型對(duì)象上的一個(gè)指向構(gòu)造函數(shù)的屬性。
先看代碼
// Pig的構(gòu)造函數(shù) function Pig(name, age) { this.name = name; this.age = age; } // 創(chuàng)建一個(gè)Pig的實(shí)例,小豬佩奇 var Peppa = new Pig("Peppa", 5);
敲黑板,劃重點(diǎn),理解這一句整個(gè)問題的關(guān)鍵,請(qǐng)多重復(fù)幾遍。:在實(shí)例化的時(shí)候,prototype上的屬性會(huì)作為原型對(duì)象賦值給實(shí)例。 也就是說小豬佩奇的原型,就是從Pig.prototype繼承來的寫成代碼就是這個(gè)樣子Peppa.__proto__ === Pig.prototype。
Pig是一個(gè)函數(shù)對(duì)象,它是Function對(duì)象的一個(gè)實(shí)例,所以Pig.__proto__ === Function.prototype一定為true。
我們?cè)谏厦嫣岬搅薱onstructor這個(gè)屬性,它位于原型對(duì)象上并且指向構(gòu)造函數(shù),所以Pig.prototype.constructor === Pig
至此,我大致捋了一遍這三個(gè)屬性的關(guān)系,我們?cè)夙樦@條鏈繼續(xù)往深挖一挖。Function.prototype,也就是Function的原型對(duì)象。這個(gè)原型對(duì)象的__proto__指向了Object.prototype。打破砂鍋問到底,Object.prototype.__proto__又指向誰,JS世界里萬物皆對(duì)象,Object似乎已經(jīng)到了原型鏈的頂端,果然不出我所料,它確實(shí)是null。:
你可能要吐槽了,說好的講明白呢,這一坨都被你繞糊涂了,一張圖勝過千言萬語:
解釋一下上面的圖。先看藍(lán)色那條線,Pig,Function和Object的構(gòu)造函數(shù)是Function的實(shí)例,所以它們的__proto__均指向Function.prototype。這就印證了敲黑板說的那句話,prototype屬性會(huì)作為原型對(duì)象賦值給實(shí)例,每個(gè)對(duì)象的__proto__都指向原型對(duì)象(處于最頂層的Object.prototype除外)。
再看綠色那條,Pig和Function的原型對(duì)象是Object的實(shí)例,所以它們的__proto__均指向了Object.prototype,也就是Object的原型對(duì)象。
淺藍(lán)色的線表明了原型的constructor指向了構(gòu)造函數(shù)。
Emmmm,其實(shí)也沒那么復(fù)雜對(duì)不對(duì)?接著說一下原型鏈。正如你在上面圖中所看到的,JS在創(chuàng)建對(duì)象的時(shí)候,會(huì)在新對(duì)象上產(chǎn)生一個(gè)__proto__的屬性,這個(gè)屬性指向了它構(gòu)造函數(shù)的原型的prototype。由此一級(jí)一級(jí)向上直到到達(dá)Object.prototype.__proto__ === null的這個(gè)鏈條我們稱之為原型鏈。
關(guān)于繼承的概念,本來想寫在一起的,后來想想,內(nèi)容過多只會(huì)讓文章成為收藏不看系列,所以這塊的內(nèi)容放在以后的文章里詳解。各位看官,我想我大致講明白了原型和原型鏈的概念,有什么錯(cuò)誤還懇請(qǐng)批評(píng)指正。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/107962.html
摘要:每天一個(gè)社會(huì)人實(shí)現(xiàn)效果想法之前看到一篇博客,使用繪制出了小豬佩奇,所以自己想試一試,采用純繪制出低配版的小豬佩奇。在布局上,沒有堅(jiān)持嵌套,導(dǎo)致縮放時(shí)位置錯(cuò)位,如果想實(shí)行縮放一致,可采用小豬的頭部嵌套布局實(shí)現(xiàn)。 每天一個(gè)CSS-社會(huì)人 實(shí)現(xiàn)效果 showImg(https://segmentfault.com/img/remote/1460000016461611?w=667&h=620...
摘要:所以一開始讓我看小豬佩奇的時(shí)候我是拒絕的,因?yàn)槟悴荒茏屛铱矗揖婉R上去看,第一我要試一下。其實(shí)這道題對(duì)于真正看了小豬佩奇的人來說是送分題,就看是不是真的看了。這里說的都是類,這也正是小豬佩奇的構(gòu)圖精髓,一種手繪風(fēng)格,而不是標(biāo)準(zhǔn)刻板的線條。 歡迎大家前往騰訊云+社區(qū),獲取更多騰訊海量技術(shù)實(shí)踐干貨哦~ 作者:江志耿 | 騰訊TEG網(wǎng)絡(luò)工程師 我是佩奇,哼,這是我的弟弟喬治,呱呱,這是我的媽...
摘要:主要有以下幾個(gè)步驟找一張小豬喬治的圖片參考對(duì)圖片中的部分進(jìn)行分解,并逐一實(shí)現(xiàn)廢話其實(shí)掌握了后,這些步驟都不難了,細(xì)心繪制就可以完成啦。我繪制的小豬喬治如圖參考資料用畫小豬佩奇,你就是下一個(gè)社會(huì)人 概述 之前看了一篇關(guān)于用CSS來畫小豬佩奇的文章,抱著鍛煉自己的心態(tài)造了個(gè)輪子,畫了個(gè)佩奇的小弟喬治,效果可以看這里,源碼在這里。 開發(fā)過程中也讓我對(duì)border-radius這個(gè)屬性有了更深...
摘要:缺點(diǎn)首先要記住原型模式的拷貝時(shí)不會(huì)執(zhí)行構(gòu)造函數(shù)的。源碼地址原型模式參考慕課網(wǎng)設(shè)計(jì)模式精講設(shè)計(jì)模式之原型模式原型模式示例六原型模式破壞單例模式 0x01.定義與類型 定義:指原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過拷貝這些原型創(chuàng)建新的對(duì)象 特點(diǎn):不需要知道任何創(chuàng)建的細(xì)節(jié),不調(diào)用構(gòu)造函數(shù) 類型:創(chuàng)建型 UMLshowImg(https://segmentfault.com/img/bVbuc...
摘要:代碼示例語法和方法類似,不同的是,傳入調(diào)用函數(shù)的參數(shù)變成以數(shù)組的形式傳入,即改造上面的示例就是方法用于將函數(shù)體內(nèi)的綁定到某個(gè)對(duì)象,然后返回一個(gè)新函數(shù)。類型包裝對(duì)象數(shù)值字符串布爾值在一定條件下,也會(huì)自動(dòng)轉(zhuǎn)為對(duì)象,也就是原始類型的包裝對(duì)象。 現(xiàn)在的前端框架層出不窮,3個(gè)月就要重新入門一次前端的現(xiàn)狀,讓我們來不及學(xué)好基礎(chǔ)就開始上手框架。常常就因?yàn)檫@樣,我們會(huì)很快到達(dá)基礎(chǔ)基礎(chǔ)技術(shù)瓶頸,基礎(chǔ)是所...
閱讀 1130·2021-11-24 10:21
閱讀 2568·2021-11-19 11:35
閱讀 1667·2019-08-30 15:55
閱讀 1297·2019-08-30 15:54
閱讀 1197·2019-08-30 15:53
閱讀 3508·2019-08-29 17:21
閱讀 3312·2019-08-29 16:12
閱讀 3417·2019-08-29 15:23