圖片來自 kzloser
js的三種對(duì)象,即實(shí)例對(duì)象,構(gòu)造函數(shù)對(duì)象,原型對(duì)象
紅色線prototype屬性:
普通對(duì)象沒有prototype,函數(shù)對(duì)象都有prototype。
所以實(shí)例對(duì)象和構(gòu)造函數(shù)對(duì)象之間沒有紅線,但是構(gòu)造函數(shù)和原型對(duì)象之間有紅線。黑色線 constructor屬性:原型對(duì)象中都有個(gè)預(yù)定義的constructor對(duì)象,用來引用他的函數(shù)對(duì)象。
F.prototype.constructor = F
Object.prototype.constructor = Object
Array.prototype.constructor = Array
藍(lán)色線 原型鏈 :js的每一個(gè)對(duì)象都有個(gè)proto內(nèi)置屬性,指向創(chuàng)建他的函數(shù)對(duì)象的原型對(duì)象。so,創(chuàng)建實(shí)例對(duì)象的函數(shù)是構(gòu)造函數(shù)對(duì)象(第二列),而他的原型就對(duì)應(yīng)各自的.prototype即原型對(duì)象(第三列)。
所有原型對(duì)象的proto 指向的都是 Object.prototype ,除了 Object.prototype 本身,它自己是指向 null ,即原型鏈終點(diǎn)是null。綠色線 構(gòu)造函數(shù)產(chǎn)生的實(shí)例對(duì)象,通過new XX() 所得到的實(shí)例。
紫色線 proto的由來,其實(shí)和藍(lán)色線是相同的,因?yàn)?br>
第二列構(gòu)造函數(shù)對(duì)象.prototype = 第三列原型對(duì)象
下面是另一張圖,也很好。
和原型有關(guān)的API
instanceof, 測(cè)試一個(gè)對(duì)象在其原型鏈中是否存在一個(gè)構(gòu)造函數(shù)的 prototype 屬性
object instanceof constructor
檢測(cè) constructor.prototype 是否存在于參數(shù) object 的原型鏈上
Object.getPrototypeOf(obj)得到obj的原型