再講js之前,必須先了解Object和Function,
Object和Function都作為JS的自帶函式,Object繼承自己,Function繼承自己,Object和Function互相是繼承對方,也就是說Object和Function都既是函式也是物件,

普通物件和函式物件
JavaScript中萬物皆物件,但是物件之間是有區別的,分為函式物件和普通物件
凡是通過new Function創建的物件但是函式物件,其他都是普通物件(通常都是Object創建的)

原型(prototype)
每個函式都有一個屬性prototype,這個prototype的屬性值是一個物件(屬性的集合),它默認只有一個叫做constructor的屬性,它指向這個函式的本身,

SuperType是一個函式,右側的方框就是他的原型
原型(prototype)既然作為物件,除了constructor外,還可以自定義許多屬性:

rototype原型只能通過函式呼叫,自定義函式的原型指向它自己(物件沒有原型)
constructor(構造器)(在原型物件中)
在JavaScript中,每個具有原型的物件都會自動獲得得constructor屬性,除了
arguments、Enumerator、Error、Global、Math、RegExp等一些特殊物件之外,其他所有的JavaScript內置物件都具備constructor屬性,例如:Array、Boolean、Date、Function、Number、Object
constructor回傳創建實體物件時建構式的參考,此屬性的值是對函式本身的參考,而不是一個包含函式名稱的字串

隱式原型(__proto__)
每個JavaScript物件(除了null)都具備隱式原型(_proto_)這是一個訪問器(即getter函式和setter函式),通過它可以訪問到物件的內部[prototype](一個物件或null)


原型鏈
因為每個物件和原型(prototype)都有隱式原型,物件的隱式原型指向創建該物件的建構式的原型物件,而父的原型又指向父的父,這種原型層層連接起來的就構成了原型鏈,
藍色的線就是原型鏈,null 表示“沒有物件”,即該處不應該有值,這句話也意味著 Object.prototype 沒有原型
附上一張全解圖:

總結:
Function的原型和隱式原型都指向它自己
自定義函式的隱式原型指向上一級的原型,最終都指向Function.prototype
建構式的隱式原型最終都指向Object.portotype
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/413916.html
標籤:其他
上一篇:當它與Excel不同時如何解釋R中的Spearman相關性
下一篇:【js實戰篇】點名抽獎系統
