摘要:它通過給對象添加原型關系即給某個對象添加屬性實現一個關聯。里面的原型關系真的很復雜也很繞,如果只是很枯燥的講述各種關系,真的很難記住,在這里希望通過代碼和思維導圖組合的形式,對的原型進行一次深度的剖析和理解。
概述
JS中原型是為了實現代碼重用的一種仿類機制,不過它跟類又完全不同。它通過給對象添加原型關系(即給某個對象添加__proto__屬性)實現一個關聯。把共有的方法和屬性放到這個關聯上即實現了JS的繼承。簡單來說就是一種委托機制。
JS里面的原型關系真的很復雜也很繞,如果只是很枯燥的講述各種關系,真的很難記住,在這里希望通過代碼和思維導圖組合的形式,對JS的原型進行一次深度的剖析和理解。
代碼分析首先,我們給出下面的一組關系代碼
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導圖理解
下圖是根據上述關系繪制的思維導圖,方便大家理解。
總結引擎會創建兩個對象Object.prototype和Function.prototype
用__proto__將Function.prototype和Object.prototype關聯
非函數對象可以通過__proto__找到Object.prototype
函數對象通過__proto__找到Function.prototype
函數的 prototype 是一個對象,該對象的__proto__指向Object.prototype
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/105472.html
摘要:原型鏈和對象的原型是對象實例和它的構造函數之間建立的鏈接,它的值是構造函數的。對象的原型根據上文提到的構造調用函數的時候會創建一個新對象,自動將的原型指向構造函數的對象。 showImg(https://segmentfault.com/img/remote/1460000020185197); JS的原型、原型鏈一直是比較難理解的內容,不少初學者甚至有一定經驗的老鳥都不一定能完全說清...
摘要:引子獨家解析原型繼承已經比較全面的分析了自定義函數類型,內置基本類和內置對象類型的的以及的原型鏈。鑒于函數是的一等公民,另辟新篇介紹函數的原型及其應用。函數本身也是對象,它遵循獨家解析原型繼承所描述的自定義函數類型對象的原型法則。 引子 獨家解析Javascript原型繼承已經比較全面的分析了自定義函數類型,JS內置基本類(undefined, null, bool, number, ...
摘要:屬性返回所屬函數的函數名稱。正確字符串如果格式錯誤構造函數返回的仍是一個的實例所以結果為第題解析一個的屬性就是參數的個數。的結果中國標準時間,獲得當前時間是個對象,是獲得當前時間是個字符串。 第23道 [1 < 2 < 3, 3 < 2 < 1] 解析:如果加上括號就清楚了許多。(1 < 2) < 3 => (true) < 3 => 1 < 3 => true(3 < 2) < 1 ...
摘要:面向對象實現代碼動物發聲汪汪喵喵調用代碼動物發聲喵喵動物發聲汪汪當要增加一種動物時,只需增加一個繼承,不會影響其他已有的動物邏輯。所以的繼承和的原型繼承,可謂殊途同歸。 傳統面向對象的繼承和多態 我們知道C++/Java/C#等面向對象語言,都原生地支持類的繼承。繼承的核心作用大抵是創建一個派生類,并使其復用基本類(即父類)的字段和/或方法。并且派生類可以重寫基本類的方法。這樣基本類和...
閱讀 703·2021-11-18 10:02
閱讀 3579·2021-09-02 10:21
閱讀 1725·2021-08-27 16:16
閱讀 2057·2019-08-30 15:56
閱讀 2385·2019-08-29 16:53
閱讀 1372·2019-08-29 11:18
閱讀 2952·2019-08-26 10:33
閱讀 2641·2019-08-23 18:34