對象的原型鏈

對象的原型鏈

  1. 凡是對象就有原型
  2. 原型也是對象

凡是對象就有原型, 那麼原型又是對象, 所以凡是給定義一個對象, 那麼就能夠找到他的原型, 原型還有原型. 那麼如此下去, 就構成一個對象的序列. 稱該結構爲原型鏈.瀏覽器

問題:app

  1. 原型鏈到底到何時是一個頭
  2. 一個默認的原型鏈結構是怎樣的
  3. 原型鏈結構對已知語法的修正

原型鏈的結構

凡是使用構造函數建立出對象, 而且沒有利用賦值的方式修改原型, 就說該對象保留默認的原型鏈.dom

默認原型鏈結構是什麼樣子呢?函數

 function Person() {} var p = new Person(); // p 具備默認的原型鏈function Person() {} var p = new Person(); // p 具備默認的原型鏈

默認的原型鏈結構就是:spa

當前對象 -> 構造函數.prototype -> Object.prototype -> nullprototype

在實現繼承的時候, 有時會利用替換原型鏈結構的方式實現原型繼承, 那麼原型鏈結構就會發生改變code

  function ItcastCollection () {}
    ItcastCollection.prototype = [];
    var arr = new ItcastCollection();
    // arr -> [] -> Array.prototype -> Object.prototype -> null
    // var arr = new Array();

 

什麼是原型式繼承

所謂的原型式繼承就是利用修改原型鏈的結構( 增長一個節點, 刪除一個節點, 修改節點中的成員 ), 來使得實例對象能夠使用整條鏈中的全部成員.對象

這裏的使用規則必須知足屬性搜索原則blog

繪製對象的原型鏈結構

說明: 函數中也有 __proto__ 屬性. 注意, 暫時不考慮函數的該屬性繼承

 function Person () {} var p = new Person();function Person () {} var p = new Person();

練習:

  1. 繪製 {} 的原型鏈結構
  2. 繪製 [] 的原型鏈結構

在 js 中, 全部的對象字面量在解析之後, 就是一個具體的對象了. 那麼能夠理解爲 調用的 對應的構造方法.

  1. 例如在代碼中寫上 {}, 就至關於 new Object()
  2. 例如代碼中有 [], 就至關於 new Array()
  3. 例如代碼中有 /./, 就至關於 new RegExp( '.' )

注意: 在底層理論執行的過程當中, 是否有調用構造函數, 不必定. 和瀏覽器的版本有關.

在原型鏈中繪製 Object.prototype 對應的構造函數

練習, 繪製原型鏈結構

    var o = {
        appendTo: function ( dom ) {
        }
    };
    function DivTag() {}
    DivTag.prototype = o;

    var div = new DivTag();

// div -> DivTag.prototype( 就是 o ) -> Object.prototype -> null
相關文章
相關標籤/搜索