JavaScript的原型鏈

image.png

一、基本原理解釋:

  1. 所有對象(包括函數(shù))都是通過__proto__指向某個(gè) 原型對象
  2. 所有對象(除了null)都會(huì)通過__proto__ 直接或間接的指向無名的花對象。
  3. 每個(gè)函數(shù)都會(huì)額外具備一個(gè)prototype的指針,指向到那個(gè)原型對象。
  4. new 函數(shù)名()產(chǎn)生的對象,其__proto__就會(huì)指向那個(gè)原型對象。
  5. 原型對象所有的成員都會(huì)被指向它的那些對象訪問到(直接或間接),所以可以認(rèn)為:函數(shù)是對象的工廠。
  6. 針對原型對象的讀策略是:依鏈查找,直到找到花對象;而寫策略是:直接在對象本身進(jìn)行掛載或覆蓋。

二、進(jìn)階的認(rèn)知:

  1. 函數(shù)自身也是對象,其__proto__ 指向的對象是一個(gè)名字為Function的函數(shù)的prototype指向的對象,所以可以認(rèn)為Function是函數(shù)的工廠,可以如下描述:
var Object=new Function();
var Date=new Function();

當(dāng)然,如果是我們自定義的函數(shù)本質(zhì)上是如下方式定義的:

var Person=new Function();

傳參和函數(shù)體如下:

var Person=new Function("name","this.name=name");
  1. JS的設(shè)計(jì)者要完成: Function自身是函數(shù),但也是對象的目標(biāo),所以最后提出以下設(shè)想:Function對象是Function函數(shù)產(chǎn)生的!基于以上設(shè)想,將Function做為對象使用的__proto__指向到Function做為函數(shù)的__prototype__,完成全部的設(shè)計(jì)。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 文章有點(diǎn)長,耐心看完,希望你有所收獲?。。?創(chuàng)建一個(gè)對象 每個(gè)函數(shù)都有一個(gè)prototype屬性,那這個(gè)屬性指向哪...
    kattes閱讀 913評論 0 0
  • 在JavaScript中,原型鏈作為一個(gè)基礎(chǔ),老生長談,今天我們就來深入的解讀一下原型鏈。 本章主要講的是下面幾點(diǎn)...
    Devinnn閱讀 1,506評論 1 6
  • 在JS中,原型鏈?zhǔn)且粋€(gè)重要的概念,不管是繼承還是屬性值的查找中,都用到了原型鏈的基本知識(shí),有些朋友經(jīng)常問我一些關(guān)于...
    彬_仔閱讀 1,711評論 2 20
  • 之前在控制臺(tái)對對象及原型進(jìn)行過一些探究,大概直觀的得出以下關(guān)系圖(當(dāng)然,有誤): 現(xiàn)在就來深入理解一下。 Java...
    楓葉落盡閱讀 179評論 0 0
  • 最近在解讀React源碼的時(shí)候,在讀到以下代碼的時(shí)候 Component.prototype.setState =...
    Ra1nbow閱讀 237評論 0 0

友情鏈接更多精彩內(nèi)容