<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] # 一圖理解原型鏈 以下代碼為例,看看用構造函數生成一個對象后,實例`f1`對象是如何與構造函數`Foo`、`Function`、`Object`串聯起來的。 ```js function Foo() {} const f1 = new Foo(); ``` ![](https://img.kancloud.cn/fe/30/fe30a5f49204beaa8efc206a1df8e4c2_800x419.png) 注意:`__proto__`不是 JS 標準規范,`__proto__`是實例的屬性(也就是我們所說的按原型查找),`prototype`是構造函數的屬性,`constructor`是原型上的屬性。 * `f1`對象是構造函數`Foo`的實例,所以`f1`有`__proto__`屬性。 `f1.__proto__ === Foo.prototype` `f1.__proto__.constructor === Foo.prototype.constructor === Foo` * `Foo`和`Object`雖然是構造函數,但都是`Function`構造函數的實例,所以`Foo`、`Object`有`__proto__`屬性。 `Foo.__proto__ === Object.__proto__ === Function.prototype` `Foo.__proto__.constructor === Object.__proto__.constructor === Function.prototype.constructor === Function` * `Foo.prototype`和`Function.prototype`對象是構造函數`Object`的實例,所以都有`__proto__`屬性。 `Foo.prototype.__proto__ === Function.prototype.__proto__ === Object.prototype` `Foo.prototype.__proto__.constructor === Function.prototype.__proto__.constructor === Object.prototype.constructor === Object` # 特殊機制 * 特殊 1:`Object.prototype`按道理也是某構造函數的實例對象,應該是底層實現。 `Object.prototype` 是對象,但它不是通過 Object 函數創建的。`Object.prototype` 誰創建的,它是 v8 引擎(假設用的都是 chrome 瀏覽器)按照 ECMAScript 規范創造的一個對象。 `Object.prototype.__proto__ === null`鏈路到此結束 * 特殊 2:`Function`按道理也是某構造函數(指回了自己)的實例對象,應該是底層實現。 `Function.__proto__ === Function.prototype === Object.__proto__` `Function.__proto__.constructor === Function.prototype.constructor === Function`實現閉合。 # 結論 1. 先有 `Object.prototype`(原型鏈頂端),`Function.prototype` 繼承 `Object.prototype` 而產生,最后,`Function` 和 `Object` 和其它構造函數繼承 `Function.prototype` 而產生。 2. `Function.__proto__ === Function.prototype`導致`Function.constructor === Function`,即:**Function 是它自己的構造函數** 引用自[http://www.mollypages.org/tutorials/js.mp](http://www.mollypages.org/tutorials/js.mp) > https://github.com/jawil/blog/issues/13 > [原文鏈接](https://hub.fastgit.org/Godiswill/blog/issues/10) > https://hub.fastgit.org/Godiswill/blog
                  <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>

                              哎呀哎呀视频在线观看