原型鏈
原型鏈
原型:每一個建構函式都有一個 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),按照原型鏈的方式去查詢。
相關文章
- 原型和原型鏈原型
- 原型與原型鏈原型
- JavaScript原型與原型鏈JavaScript原型
- 理解原型和原型鏈原型
- JS原型和原型鏈JS原型
- 原型物件與原型鏈原型物件
- js原型及原型鏈JS原型
- 原型和原型鏈梳理原型
- JavaScript 原型 與 原型鏈JavaScript原型
- JavaScript 原型及原型鏈JavaScript原型
- javascript——原型與原型鏈JavaScript原型
- JS 原型與原型鏈JS原型
- JavaScript中原型與原型鏈JavaScript原型
- 圖解原型和原型鏈圖解原型
- ? 圖解原型和原型鏈圖解原型
- 原型、原型鏈與繼承原型繼承
- 原型&原型鏈深度解讀原型
- javascript之原型與原型鏈JavaScript原型
- 原型、原型鏈、作用域、作用域鏈、閉包原型
- 理解js中的原型,原型物件,原型鏈JS原型物件
- JavaScript中的原型、原型鏈、原型模式JavaScript原型模式
- JavaScript 原型鏈JavaScript原型
- 理解原型鏈原型
- js原型鏈JS原型
- 原型鏈汙染原型
- JS中的原型與原型鏈JS原型
- 從感性角度談原型 / 原型鏈原型
- 【前端面試】原型和原型鏈前端面試原型
- JS原型與原型鏈圖解JS原型圖解
- 深入理解原型和原型鏈原型
- 7. JavaScript 原型與原型鏈JavaScript原型
- 原型和原型鏈的深入探索原型
- JavaScript系列之原型與原型鏈JavaScript原型
- 再解 JavaScript 原型與原型鏈JavaScript原型
- JS原型鏈、prototype、__proto__、原型鏈繼承詳解JS原型繼承
- 建構函式、原型及原型鏈函式原型
- 從感性角度學習原型/原型鏈原型
- 如何理解JavaScript的原型和原型鏈?JavaScript原型