<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                > 注意:本文不是javascript基礎教程,如果你沒有接觸過原型的基本知識,應該先去了解一下,推薦看《javascript高級程序設計(第三版)》第6章:面向對象的程序設計。 上節已經提到,每個函數function都有一個prototype,即原型。這里再加一句話——每個對象都有一個__proto__,可成為隱式原型。 這個__proto__是一個隱藏的屬性,javascript不希望開發者用到這個屬性值,有的低版本瀏覽器甚至不支持這個屬性值。所以你在Visual Studio 2012這樣很高級很智能的編輯器中,都不會有__proto__的智能提示,但是你不用管它,直接寫出來就是了。 ?![](https://box.kancloud.cn/2015-09-21_55ff98a341fe3.png) ?![](https://box.kancloud.cn/2015-09-21_55ff98a356e4c.png) 上面截圖看來,obj.__proto__和Object.prototype的屬性一樣!這么巧! 答案就是一樣。 obj這個對象本質上是被Object函數創建的,因此obj.__proto__=== Object.prototype。我們可以用一個圖來表示。 ![](https://box.kancloud.cn/2015-09-21_55ff98a3713c4.png)? 即,每個對象都有一個__proto__屬性,指向創建該對象的函數的prototype。 那么上圖中的“Object prototype”也是一個對象,它的__proto__指向哪里? 好問題! 在說明“Object prototype”之前,先說一下自定義函數的prototype。自定義函數的prototype本質上就是和 var obj = {} 是一樣的,都是被Object創建,所以它的__proto__指向的就是Object.prototype。 但是Object.prototype確實一個特例——它的__proto__指向的是null,切記切記! ![](https://box.kancloud.cn/2015-09-21_55ff98a390d85.png) 還有——函數也是一種對象,函數也有__proto__嗎? 又一個好問題!——當然有。 函數也不是從石頭縫里蹦出來的,函數也是被創建出來的。誰創建了函數呢?——Function——注意這個大寫的“F”。 且看如下代碼。 ![](https://box.kancloud.cn/2015-09-21_55ff98a3af854.png) 以上代碼中,第一種方式是比較傳統的函數創建方式,第二種是用new Functoin創建。 首先根本不推薦用第二種方式。 這里只是向大家演示,函數是被Function創建的。 好了,根據上面說的一句話——對象的__proto__指向的是創建它的函數的prototype,就會出現:Object.__proto__ === Function.prototype。用一個圖來表示。 ![](https://box.kancloud.cn/2015-09-21_55ff98a8c659b.png) 上圖中,很明顯的標出了:自定義函數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創建的對象,所以也遵循基本的規則。 ![](https://box.kancloud.cn/2015-09-21_55ff98a8e08ed.png) OK 本節結束,是不是很亂? 亂很正常。那這一節就讓它先亂著,下一節我們將請另一個老朋友來幫忙,把它理清楚。這位老朋友就是——instanceof。 具體內容,請看下節分解。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看