摘要:它通過(guò)給對(duì)象添加原型關(guān)系即給某個(gè)對(duì)象添加屬性實(shí)現(xiàn)一個(gè)關(guān)聯(lián)。里面的原型關(guān)系真的很復(fù)雜也很繞,如果只是很枯燥的講述各種關(guān)系,真的很難記住,在這里希望通過(guò)代碼和思維導(dǎo)圖組合的形式,對(duì)的原型進(jìn)行一次深度的剖析和理解。
概述
JS中原型是為了實(shí)現(xiàn)代碼重用的一種仿類機(jī)制,不過(guò)它跟類又完全不同。它通過(guò)給對(duì)象添加原型關(guān)系(即給某個(gè)對(duì)象添加__proto__屬性)實(shí)現(xiàn)一個(gè)關(guān)聯(lián)。把共有的方法和屬性放到這個(gè)關(guān)聯(lián)上即實(shí)現(xiàn)了JS的繼承。簡(jiǎn)單來(lái)說(shuō)就是一種委托機(jī)制。
JS里面的原型關(guān)系真的很復(fù)雜也很繞,如果只是很枯燥的講述各種關(guān)系,真的很難記住,在這里希望通過(guò)代碼和思維導(dǎo)圖組合的形式,對(duì)JS的原型進(jìn)行一次深度的剖析和理解。
代碼分析首先,我們給出下面的一組關(guān)系代碼
function Test() {} var t1 = new Test() var t2 = {} var t3 = new Number(1) t1.__proto__ === Test.prototype Test.__proto__ === Function.prototype Test.prototype.__proto__ === Object.prototype t2.__proto__ === Object.prototype Number.__proto__ === Function. prototype Math.__proto__ === Object.prototype t3.__proto__ === Number.prototype Number.prototype.__proto__=== Object.prototype導(dǎo)圖理解
下圖是根據(jù)上述關(guān)系繪制的思維導(dǎo)圖,方便大家理解。
總結(jié)引擎會(huì)創(chuàng)建兩個(gè)對(duì)象Object.prototype和Function.prototype
用__proto__將Function.prototype和Object.prototype關(guān)聯(lián)
非函數(shù)對(duì)象可以通過(guò)__proto__找到Object.prototype
函數(shù)對(duì)象通過(guò)__proto__找到Function.prototype
函數(shù)的 prototype 是一個(gè)對(duì)象,該對(duì)象的__proto__指向Object.prototype
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/105472.html
摘要:原型鏈和對(duì)象的原型是對(duì)象實(shí)例和它的構(gòu)造函數(shù)之間建立的鏈接,它的值是構(gòu)造函數(shù)的。對(duì)象的原型根據(jù)上文提到的構(gòu)造調(diào)用函數(shù)的時(shí)候會(huì)創(chuàng)建一個(gè)新對(duì)象,自動(dòng)將的原型指向構(gòu)造函數(shù)的對(duì)象。 showImg(https://segmentfault.com/img/remote/1460000020185197); JS的原型、原型鏈一直是比較難理解的內(nèi)容,不少初學(xué)者甚至有一定經(jīng)驗(yàn)的老鳥(niǎo)都不一定能完全說(shuō)清...
摘要:引子獨(dú)家解析原型繼承已經(jīng)比較全面的分析了自定義函數(shù)類型,內(nèi)置基本類和內(nèi)置對(duì)象類型的的以及的原型鏈。鑒于函數(shù)是的一等公民,另辟新篇介紹函數(shù)的原型及其應(yīng)用。函數(shù)本身也是對(duì)象,它遵循獨(dú)家解析原型繼承所描述的自定義函數(shù)類型對(duì)象的原型法則。 引子 獨(dú)家解析Javascript原型繼承已經(jīng)比較全面的分析了自定義函數(shù)類型,JS內(nèi)置基本類(undefined, null, bool, number, ...
摘要:屬性返回所屬函數(shù)的函數(shù)名稱。正確字符串如果格式錯(cuò)誤構(gòu)造函數(shù)返回的仍是一個(gè)的實(shí)例所以結(jié)果為第題解析一個(gè)的屬性就是參數(shù)的個(gè)數(shù)。的結(jié)果中國(guó)標(biāo)準(zhǔn)時(shí)間,獲得當(dāng)前時(shí)間是個(gè)對(duì)象,是獲得當(dāng)前時(shí)間是個(gè)字符串。 第23道 [1 < 2 < 3, 3 < 2 < 1] 解析:如果加上括號(hào)就清楚了許多。(1 < 2) < 3 => (true) < 3 => 1 < 3 => true(3 < 2) < 1 ...
摘要:面向?qū)ο髮?shí)現(xiàn)代碼動(dòng)物發(fā)聲汪汪喵喵調(diào)用代碼動(dòng)物發(fā)聲喵喵動(dòng)物發(fā)聲汪汪當(dāng)要增加一種動(dòng)物時(shí),只需增加一個(gè)繼承,不會(huì)影響其他已有的動(dòng)物邏輯。所以的繼承和的原型繼承,可謂殊途同歸。 傳統(tǒng)面向?qū)ο蟮睦^承和多態(tài) 我們知道C++/Java/C#等面向?qū)ο笳Z(yǔ)言,都原生地支持類的繼承。繼承的核心作用大抵是創(chuàng)建一個(gè)派生類,并使其復(fù)用基本類(即父類)的字段和/或方法。并且派生類可以重寫(xiě)基本類的方法。這樣基本類和...
閱讀 739·2021-11-18 10:02
閱讀 3670·2021-09-02 10:21
閱讀 1776·2021-08-27 16:16
閱讀 2091·2019-08-30 15:56
閱讀 2439·2019-08-29 16:53
閱讀 1399·2019-08-29 11:18
閱讀 2983·2019-08-26 10:33
閱讀 2668·2019-08-23 18:34