原型鏈

會敲程式碼的熊發表於2020-11-10

原型鏈

原型:每一個建構函式都有一個 prototype 屬性,指向另一個物件。這個 prototype 就是一個物件,這個物件的所有屬性和方法,都會被建構函式所擁有。

原型的作用:資源共享。

例項物件原型:例項物件有一個屬性 proto 指向建構函式的 prototype 原型物件。

例項物件原型__proto__和建構函式的prototype是等價的。
方法的查詢規則:首先先看物件身上是否有方法,如果有就執行這個物件上的方法,如果麼沒有這個方法,因為有__proto__ 的存在,就去建構函式原型物件prototype身上去查詢方法。

例項物件原型( proto)和建構函式原型物件(prototype)裡面都有一個屬性 constructor 屬性 ,constructor 我們稱為建構函式,因為它指回建構函式本身。

一般情況下,物件的方法都在建構函式的原型物件中設定。如果有多個物件的方法,我們可以給原型物件採取物件形式賦值,但是這樣就會覆蓋建構函式原型物件原來的內容,這樣修改後的原型物件 constructor 就不再指向當前建構函式了。此時,我們可以在修改後的原型物件中,新增一個 constructor 指向原來的建構函式。

prototype:每一個建構函式都有一個prototype屬性,指向的是該建構函式的原型物件。

proto:每一個例項物件都有一個__proto__屬性,指向建構函式的原型物件。

constructor:例項物件原型__proto__和建構函式prototype原型物件裡面都有一個屬性 constructor 屬性 ,都指向了建構函式。

關係:

  1.建構函式的prototype屬性指向了建構函式原型物件。
  2.例項物件是由建構函式建立的,例項物件的__proto__屬性指向了建構函式的原型物件。
  3.建構函式的原型物件的constructor屬性指向了建構函式,例項物件的原型的constructor屬性也指向了建構函式。

每一個例項物件又有一個__proto__屬性,指向的建構函式的原型物件,建構函式的原型物件也是一個物件,也有__proto__屬性,這樣一層一層往上找就形成了原型鏈。

訪問一個物件的屬性(包括方法)時,首先查詢這個物件自身有沒有該屬性。如果沒有就查詢它的原型(也就是 __proto__指向的 prototype 原型物件)。如果還沒有就查詢原型物件的原型(Object的原型物件)。依此類推一直找到 Object 為止(null),按照原型鏈的方式去查詢。

在這裡插入圖片描述

相關文章