成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

原型模式故事鏈(2)--原型鏈的四大理論

MarvinZhang / 1105人閱讀

摘要:所有引用類型的隱式原型指向它構(gòu)造函數(shù)的顯式原型。理論就不驗(yàn)證了,寫原型模式時(shí)。原型模式構(gòu)造函數(shù)原型實(shí)例化橘貓魚呀魚橘貓魚呀魚在上述代碼中,在之后就相當(dāng)于這個(gè)函數(shù)。

上一章:new一個(gè)對(duì)象的過程 https://segmentfault.com/a/11...

原型鏈4大理論:
1.所有的引用類型都有一個(gè)_proto_屬性,稱之為隱式原型。

2.所有的函數(shù)(Function)都有一個(gè)prototype屬性,稱之為顯式原型或者直接叫原型。

3.所有引用類型的隱式原型指向它構(gòu)造函數(shù)的顯式原型。

4.當(dāng)試圖得到一個(gè)對(duì)象的某個(gè)屬性時(shí),如果這個(gè)對(duì)象本身沒有這個(gè)屬性,那么它會(huì)去到_proto_中尋找。(也就相當(dāng)于會(huì)去構(gòu)造函數(shù)的prototype中尋找)

畫了一個(gè)圖:

ps:關(guān)于JS的數(shù)據(jù)類型在下一章有

那我們來驗(yàn)證一下:

驗(yàn)證:
理論1:所有的引用類型都有一個(gè)_proto_屬性,稱之為隱式原型。

    //引用類型
    var obj = {
        x:1,
        y:2
    }
    console.log("obj:",obj)

    var arr = [1,2,3]
    console.log("arr:",arr)

    //值類型
    var str = "abc";
    var num = 123;
    console.log("str:",str)
    console.log("num:",num)

控制臺(tái)打印的日志如下:

可以看出,值類型的都有隱式原型。理論1成立。

理論2就不驗(yàn)證了,寫原型模式時(shí)。本身就可以直接用。例如:Animal.prototype={}

理論3:3.所有引用類型的隱式原型指向它構(gòu)造函數(shù)的顯式原型。在上一章new一個(gè)對(duì)象的過程中步驟2驗(yàn)證過,成立。傳送門在頂部。

理論4:當(dāng)試圖得到一個(gè)對(duì)象的某個(gè)屬性時(shí),如果這個(gè)對(duì)象本身沒有這個(gè)屬性,那么它會(huì)去到_proto_中尋找。(也就相當(dāng)于去構(gòu)造函數(shù)的prototype中尋找)

這個(gè)是很重要的一個(gè)理論。詳細(xì)講解一下。




    原型模式





在上述代碼中,在new之后cat就相當(dāng)于Animal這個(gè)函數(shù)。但是在Animal中并沒有eat()這個(gè)方法。
根據(jù)理論4,在_proto_中找到了eat()所以能成功執(zhí)行。為什么_proto_中就有eat()呢。因?yàn)樵趎ew的時(shí)候,步驟2時(shí)設(shè)置新的對(duì)象的隱式原型指向其構(gòu)造函數(shù)的顯式原型。

我們?cè)賮砜纯匆粋€(gè)東西:




    原型模式





控制臺(tái)打印日志如下:

上圖可以看到cat執(zhí)行toString()并不會(huì)報(bào)錯(cuò),說明這個(gè)方法存在。但是既不在構(gòu)造函數(shù)里,也不在原型里,那在哪里呢?
根據(jù)理論4,如果這個(gè)對(duì)象本身沒有這個(gè)屬性,那么它會(huì)去到_proto_中尋找。(也就相當(dāng)于去構(gòu)造函數(shù)的prototype中尋找),所以在Animal.prototype中找不到,那么由于Animal.prototype是一個(gè)對(duì)象,屬于引用類型,也滿足定理4,所以在Animal.prototype的_proto_中繼續(xù)找,也就是到Object.prototype中找,剛好找到了!
這個(gè)一層一層的往上找就是所謂的原型鏈。(具體看最開始畫的那個(gè)圖)
也不能無限的往上找,避免死循環(huán),在往上就是null了。

哎喲說了這么多,請(qǐng)看:
下一回:JS的數(shù)據(jù)類型 https://segmentfault.com/a/11...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/98658.html

相關(guān)文章

  • 原型模式故事(2)--原型四大理論

    摘要:所有引用類型的隱式原型指向它構(gòu)造函數(shù)的顯式原型。理論就不驗(yàn)證了,寫原型模式時(shí)。原型模式構(gòu)造函數(shù)原型實(shí)例化橘貓魚呀魚橘貓魚呀魚在上述代碼中,在之后就相當(dāng)于這個(gè)函數(shù)。 上一章:new一個(gè)對(duì)象的過程 https://segmentfault.com/a/11... 原型鏈4大理論:1.所有的引用類型都有一個(gè)_proto_屬性,稱之為隱式原型。 2.所有的函數(shù)(Function)都有一個(gè)pro...

    MRZYD 評(píng)論0 收藏0
  • 原型模式故事(2)--原型四大理論

    摘要:所有引用類型的隱式原型指向它構(gòu)造函數(shù)的顯式原型。理論就不驗(yàn)證了,寫原型模式時(shí)。原型模式構(gòu)造函數(shù)原型實(shí)例化橘貓魚呀魚橘貓魚呀魚在上述代碼中,在之后就相當(dāng)于這個(gè)函數(shù)。 上一章:new一個(gè)對(duì)象的過程 https://segmentfault.com/a/11... 原型鏈4大理論:1.所有的引用類型都有一個(gè)_proto_屬性,稱之為隱式原型。 2.所有的函數(shù)(Function)都有一個(gè)pro...

    Meils 評(píng)論0 收藏0
  • 原型模式故事(4)--JS執(zhí)行上下文、變量提升、函數(shù)聲明

    摘要:代碼在執(zhí)行之前會(huì)先全局中變量提升函數(shù)聲明。函數(shù)的執(zhí)行上下文,也就是在這個(gè)函數(shù)范圍內(nèi)找到函數(shù)執(zhí)行上下文中函數(shù)范圍內(nèi),所有用聲明的變量。函數(shù)執(zhí)行時(shí),按照?qǐng)?zhí)行位置查找變量作用域只會(huì)向上查找。下一回變量作用域與閉包 上一章:JS的數(shù)據(jù)類型 傳送門:https://segmentfault.com/a/11... 好!話不多少,我們就開始吧。對(duì)變量提升和函數(shù)聲明的理解,能讓你更清楚容易的理解,...

    melody_lql 評(píng)論0 收藏0
  • 原型模式故事(4)--JS執(zhí)行上下文、變量提升、函數(shù)聲明

    摘要:代碼在執(zhí)行之前會(huì)先全局中變量提升函數(shù)聲明。函數(shù)的執(zhí)行上下文,也就是在這個(gè)函數(shù)范圍內(nèi)找到函數(shù)執(zhí)行上下文中函數(shù)范圍內(nèi),所有用聲明的變量。函數(shù)執(zhí)行時(shí),按照?qǐng)?zhí)行位置查找變量作用域只會(huì)向上查找。下一回變量作用域與閉包 上一章:JS的數(shù)據(jù)類型 傳送門:https://segmentfault.com/a/11... 好!話不多少,我們就開始吧。對(duì)變量提升和函數(shù)聲明的理解,能讓你更清楚容易的理解,...

    zhigoo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<