<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] > ### 寫一個構造函數,生成一個實例 ```js // 構造函數 function Person(name, age) { this.name = name; this.age = age; } // xu 是通過構造函數 new 出的一個實例 var xu = new Person('xu', 19); ``` > ### 構造函數 > `console.log(Person); ` ![](https://box.kancloud.cn/b83b0453d387f6896c48afb4e5282e86_205x56.png) > ### 原型 `console.log(Person.prototype); ` ![](https://box.kancloud.cn/cb7ba1ac67490de8fd2eedb7fa01aee9_254x83.png) > ### 實例的` __proto__`,其實就是原型 > `console.log(xu.__proto__); ` ![](https://box.kancloud.cn/cb7ba1ac67490de8fd2eedb7fa01aee9_254x83.png) > ### 實例的原型的構造器,其實就是構造函數 `console.log(xu.__proto__.constructor); ` ![](https://box.kancloud.cn/b83b0453d387f6896c48afb4e5282e86_205x56.png) >構造函數Person === 實例的原型的構造器 `console.log(Person === xu.__proto__.constructor); // true ` > ### 在原型上定義一個方法 ``` Person.prototype.add = function(a, b) { console.log(a + b); } // xu.__proto__.reduce = function(a, b) xu.__proto__.constructor.prototype.reduce = function (a, b) { console.log(a - b); } xu.add(1, 2); xu.reduce(1, 2); ``` > ### __proto__和prototype `__proto__` 是實例具有的屬性,指向原型 `prototype` 是構造函數具有的屬性,可以直接通過`構造函數.prototype.函數名 = function(){}` 在原型上添加方法 > ### 獲取某個原型, Object.getPrototypeOf(obj) ```js console.log(Object.getPrototypeOf(xu)); ``` ![](https://box.kancloud.cn/912583503e756f5bc7892cc8d7728549_299x84.png) > ### 原型鏈 1. 什么是原型鏈 讀取對象的某個屬性時,JavaScript引擎先尋找對象本身的屬性,如果找不到,就到它的原型去找,如果還是找不到,就到原型的原型去找。如果直到最頂層的Object.prototype還是找不到,則返回undefined。這個過程就叫原型鏈 2. 原型鏈的特點: - 如果對象自身和它的原型,都定義了一個同名屬性,那么優先讀取對象自身的屬性,這叫做“覆蓋”(overiding)。 - 一級級向上在原型鏈尋找某個屬性,對性能是有影響的。所尋找的屬性在越上層的原型對象,對性能的影響越大。如果尋找某個不存在的屬性,將會遍歷整個原型鏈。 - constructor屬性是原型對象上的一個屬性,可以被所有實例對象所共享。要注意的是,prototype是構造函數的屬性,而constructor則是構造函數的prototype屬性所指向的那個對象,也就是原型對象的屬性。由于constructor屬性是一種原型對象和構造函數的關系,所以在修改原型對象的時候,一定要注意constructor的指向問題。 - instanceof運算符返回一個布爾值,用于判斷對象是否為某個構造函數的實例。 3. 判斷對象的固有屬性 ``` Obj.hasOwnProperty('add') ```
                  <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>

                              哎呀哎呀视频在线观看