對JavaScript中原型及原型鏈的理解

什麼是原型:前端

  1,咱們所建立的每個函數,解析器都會向該函數對象添加一個屬性prototype,這個屬性指向一個對象,這個對象就是咱們所謂的原型對象函數

  2,若是咱們將函數做爲普通函數調用時,prototype基本沒有任何做用;當函數做爲構造函數使用時,構造函數所建立的對象中都會有一個隱含屬性,這個隱含屬性指向建立它的構建函數的原型對象(好像有點繞……),咱們能夠經過__proto__來訪問該屬性spa

  3,原型對象就至關於一個公共的區域,全部同一個類的實例均可以訪問到這個原型對象(咱們能夠將對象中共有的內容,統一設置到原型對象中)prototype

使用方法或者屬性時的一個內部查找順序(有必要知曉):對象

  (1)當訪問一個對象的屬性/方法時,首先查找這個對象自身有沒有該屬性blog

  (2)若是沒有就查找它的原型(也就是__proto__指向的構造函數prototype原型對象)原型鏈

  (3)若是尚未找到就查找原型對象的原型,就是prototype.__proto__,它應該是指向Object構造函數的原型對象-我理解爲原型對象是由Obejct這個構造函數建立的原型

  (4)依次類推,若是尚未,則它會查找Object構造函數原型的原型,也就是Object構造函數的prototype.__proto__,若是打印它,你會發現它是nullio

  

 

原型鏈:構造函數

 

 

 

ps:有沒有以爲很像一個鏈條呢

總結:

  咱們這裏須要重點知曉的是,原型對象也是對象,是對象就是用構造函數建立出來的,而最終他們都指向Object的構造函數的原型對象的原型對象,也就是null;事實上,咱們能夠把Object構造函數當作是一切對象的祖先(包括Function構造函數,它的__proto__也是指向Object),還須要知曉Js內部查找屬性和方法的一個規則,熟知這些,那麼理解原型和原型鏈就沒什麼難度了

  嗯嗯……,寫的好像有點亂,若是有大佬發現此文中的錯誤,能夠指正出來,畢竟才接觸前端沒多久,只是我的對原型的一些總結和理解,若是後續有更深刻的理解或有更簡潔的描述,會再進行補充或修改

相關文章
相關標籤/搜索