1. 每個對象都有原型屬性(__proto__)
2. 對象的原型(__proto__)指向其構造函數(Constructor)的prototype屬性
3. 構造函數(Constructor)的prototype屬性本身也是一個對象,其原型(__proto__)亦指向其構造函數的prototype
4. 如此形成一個鏈式結構,而Constructor.prototype若沒有自定義構造函數,則其始終是一個對象,構造函數為Object,
?原型為Object.prototype
5. Object.prototype的原型為null,原型鏈結束
原型鏈一般用來查找對象的屬性和方法,進行類的繼承等功能
現象說明
Object.prototype.__proto__ === null ??JS世界的源頭一片荒蕪,一切皆空
Object.__proto__ == Function.prototype ? Object是構造器,本身也是函數,所以其原型就是Function的prototype
Function.__proto__ == Function.prototype ?Function也是一種函數,所以其原型也是Function的prototype
相關方法
object.hasOwnProperty(propName) ?判斷對象本身是否有該成員,而不是從原型鏈繼承的成員
object1.isPrototypeOf(object2) ? ? ? ?判斷object1是否在object2的原型鏈上