原型鏈圖解

原型鏈.png

註解
  • 紅虛線即原型鏈,各種實例都是經過原型鏈繼承到各數據類型自己的方法和屬性。好比Object原型對象包含着對象的原生方法。
  • 函數實例經過原型鏈指向了Object的原型,因此函數實例也可做爲對象使用。好比Jquery,Jquery.ajax()就是當對象使用,Jquery("div")就是當函數使用。
相關擴展
  • instanceof運算符用於測試構造函數的prototype屬性是否出如今對象的原型鏈中的任何位置。是的話,即此對象就是此構造函數的實例。ajax

    new Function() instanceof Object 
    // true 
    // 函數是 Object的實例。
    複製代碼
  • hasOwnProperty判斷一個對象自己是否有此名稱的屬性,此方法沒法檢查該對象的原型鏈中是否具備該屬性,該屬性必須是對象自己的一個成員。瀏覽器

  • in判斷的是對象的全部屬性,包括對象實例及其原型鏈的屬性函數

  • 改變一個對象的 Prototype 屬性,是一個很是影響性能的操做,若是你關心性能,你就不該該在一個對象中修改它的 Prototype.。好比obj.__proto__ =或者Object.setPrototypeOf等操做。能夠使用 Object.create()建立一個新對象,並指定某個對象爲它的原型對象。性能

  • Object.prototype.__proto__ 已被大多數瀏覽器廠商所支持的今天,其存在和確切行爲僅在ECMAScript 2015規範中被標準化爲傳統功能,以確保Web瀏覽器的兼容性。爲了更好的支持,建議只使用 Object.getPrototypeOf()測試

  • Object.getPrototypeOf()是替代__proto__用來獲取實例對象的原型,並不能獲取構造函數的prototype。根據方法的名稱理解,很容易混淆它的用法。ui

相關文章
相關標籤/搜索