淺談原型鏈

定義

原型:在JavaScript中,每當定義一個函數數據類型(普通函數、類)時候,都會天生自帶一個prototype屬性,這個屬性指向函數的原型對象,而且這個屬性是一個對象數據類型的值。函數

每一個對象均可以有一個原型_proto_,這個原型還能夠有它本身的原型,以此類推,造成一個原型鏈。查找特定屬性的時候,咱們先去這個對象裏去找,若是沒有的話就去它的原型對象裏面去,若是仍是沒有的話再去向原型對象的原型對象裏去尋找...... 這個操做被委託在整個原型鏈上,這個就是咱們說的原型鏈了。post

原型對象和構造函數有何關係?

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

JavaScript 規定,每個構造函數都有一個 prototype 屬性,指向另外一個對象。這個對象的全部屬性和方法,都會被構造函數的所擁有。即,每一個構造函數都有一個原型對象。prototype

描述原型鏈

原型指針3d

  • prototype : prototype屬性,它是函數所獨有的,它是從一個函數指向一個對象。它的含義是函數的原型對象,也就是這個函數(其實全部函數均可以做爲構造函數)所建立的實例的原型對象; 這個屬性是一個指針,指向一個對象,這個對象的用途就是包含全部實例共享的屬性和方法(咱們把這個對象叫作原型對象)
  • _ proto _ : _ proto_ 是原型鏈查詢中實際用到的,它老是指向 prototype,換句話說就是指向構造函數的原型對象,它是對象獨有的。
  • constructor : 每一個函數都有一個原型對象,該原型對象有一個constructor屬性,指向建立對象的函數自己。

原型鏈指針

JavaScript中萬物都是對象,對象和對象之間也有關係,並非孤立存在的。對象之間的繼承關係,在JavaScript中是經過prototype對象指向父類對象,直到指向Object對象爲止,這樣就造成了一個原型指向的鏈條,專業術語稱之爲原型鏈。code

舉例說明:person → Person → Object ,普通人繼承人類,人類繼承對象類cdn

當咱們訪問對象的一個屬性或方法時,它會先在對象自身中尋找,若是有則直接使用,若是沒有則會去原型對象中尋找,若是找到則直接使用。若是沒有則去原型的原型中尋找,直到找到Object對象的原型,Object對象的原型沒有原型,若是在Object原型中依然沒有找到,則返回undefined。對象


原型鏈部分摘自浪裏行舟blog

相關文章
相關標籤/搜索