<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      深入理解javascript原型和閉包(4)——隱式原型

      注意:本文不是javascript基礎教程,如果你沒有接觸過原型的基本知識,應該先去了解一下,推薦看《javascript高級程序設計(第三版)》第6章:面向對象的程序設計。

      上節已經提到,每個函數function都有一個prototype,即原型。這里再加一句話——每個對象都有一個__proto__,可成為隱式原型。

      這個__proto__是一個隱藏的屬性,javascript不希望開發者用到這個屬性值,有的低版本瀏覽器甚至不支持這個屬性值。所以你在Visual Studio 2012這樣很高級很智能的編輯器中,都不會有__proto__的智能提示,但是你不用管它,直接寫出來就是了。

       

       

      上面截圖看來,obj.__proto__和Object.prototype的屬性一樣!這么巧!

      答案就是一樣。

      obj這個對象本質上是被Object函數創建的,因此obj.__proto__=== Object.prototype。我們可以用一個圖來表示。

       

      即,每個對象都有一個__proto__屬性,指向創建該對象的函數的prototype

       

      那么上圖中的“Object prototype”也是一個對象,它的__proto__指向哪里?

      好問題!

      在說明“Object prototype”之前,先說一下自定義函數的prototype。自定義函數的prototype本質上就是和 var obj = {} 是一樣的,都是被Object創建,所以它的__proto__指向的就是Object.prototype。

      但是Object.prototype確實一個特例——它的__proto__指向的是null,切記切記

       

      還有——函數也是一種對象,函數也有__proto__嗎?

      又一個好問題!——當然有。

      函數也不是從石頭縫里蹦出來的,函數也是被創建出來的。誰創建了函數呢?——Function——注意這個大寫的“F”。

      且看如下代碼。

      以上代碼中,第一種方式是比較傳統的函數創建方式,第二種是用new Functoin創建。

      首先根本不推薦用第二種方式

      這里只是向大家演示,函數是被Function創建的。

       

      好了,根據上面說的一句話——對象的__proto__指向的是創建它的函數的prototype,就會出現:Object.__proto__ === Function.prototype。用一個圖來表示。

      上圖中,很明顯的標出了:自定義函數Foo.__proto__指向Function.prototype,Object.__proto__指向Function.prototype,唉,怎么還有一個……Function.__proto__指向Function.prototype?這不成了循環引用了?

      對!是一個環形結構。

      其實稍微想一下就明白了。Function也是一個函數,函數是一種對象,也有__proto__屬性。既然是函數,那么它一定是被Function創建。所以——Function是被自身創建的。所以它的__proto__指向了自身的Prototype。

       

      篇幅不少了,估計也都看煩了。快結束了。

      最后一個問題:Function.prototype指向的對象,它的__proto__是不是也指向Object.prototype?

      答案是肯定的。因為Function.prototype指向的對象也是一個普通的被Object創建的對象,所以也遵循基本的規則。

       

      OK 本節結束,是不是很亂?

      亂很正常。那這一節就讓它先亂著,下一節我們將請另一個老朋友來幫忙,把它理清楚。這位老朋友就是——instanceof。

      具體內容,請看下節分解。

      ---------------------------------------------------------------------------

      本文已更新到《深入理解javascript原型和閉包系列》的目錄,更多內容可參見《深入理解javascript原型和閉包系列》。

      另外,歡迎關注我的微博

      學習作者教程:《前端JS高級面試》《前端JS基礎面試題》《React.js模擬大眾點評webapp》《zepto設計與源碼分析》《json2.js源碼解讀

      posted @ 2014-09-18 15:14  王福朋  閱讀(87342)  評論(99)    收藏  舉報
      主站蜘蛛池模板: 激情伊人五月天久久综合| 国产精品亚洲国际在线看| 国产成人精选视频在线观看不卡| 久久综合色之久久综合| 亚洲欧美自偷自拍视频图片| 九九久久人妻精品一区色| 美乳丰满人妻无码视频| 久久精品囯产精品亚洲| 欧美国产精品啪啪| 国产精品一起草在线观看| 精品国产AⅤ无码一区二区| 国产精品av中文字幕| 日韩区二区三区中文字幕| 灵山县| 久久国产精品第一区二区| 日韩国产成人精品视频| 亚洲人成网站77777在线观看| 国产边打电话边被躁视频| 人妻少妇精品性色av蜜桃| 麻豆蜜桃伦理一区二区三区| 成av免费大片黄在线观看| 欧洲无码一区二区三区在线观看| 2021亚洲爆乳无码专区| 国产亚洲无线码一区二区| 丁香五月亚洲综合在线国内自拍| 少妇被粗大的猛进出69影院| 日韩大片看一区二区三区| 日韩中文字幕v亚洲中文字幕| 欧美激欧美啪啪片| 治多县| 色爱综合另类图片av| 99久久国产精品无码| 久久久精品国产精品久久| 深夜宅男福利免费在线观看| 饥渴的熟妇张开腿呻吟视频| 国内自拍偷拍一区二区三区| 亚洲大尺度无码专区尤物| 亚洲精品久久久久久婷婷| 成人国产一区二区三区精品| 亚洲a人片在线观看网址| 乱60一70归性欧老妇|