**JS中每創(chuàng)建一個(gè)函數(shù),該函數(shù)就會(huì)自動(dòng)擁有一個(gè)prototype屬性塘安,為什么那糠涛?? **
因?yàn)樽罡系膐bject擁有一個(gè)prototype屬性,而js中所有的對(duì)象又都繼承自object耙旦,所以js中所有的對(duì)象都擁有一個(gè)prototype屬性,而在js中函數(shù)也是對(duì)象萝究,所以js中每個(gè)函數(shù)也都有一個(gè)prototype屬性免都。
例如:function Person(){...} 和function Dog(){...}
而每一個(gè)prototype屬性又會(huì)獲得一個(gè)constructor屬性
該constructor屬性有一個(gè)隱含的指針,指向了prototype屬性所在的函數(shù)帆竹。
這里就說(shuō)明了绕娘,當(dāng)用alert函數(shù)彈出 Person.prototype.constructor 的時(shí)候,彈出的結(jié)果是
function Person{....}
當(dāng)通過(guò)new Person() 創(chuàng)建一個(gè)對(duì)象實(shí)例后栽连,該實(shí)例包含一個(gè)隱含的指針险领,指向了Person.prototype
結(jié)合之前的例子,通過(guò)圖示說(shuō)明一下 構(gòu)造函數(shù)秒紧,實(shí)例對(duì)象绢陌,原型對(duì)象之間的關(guān)系
Person 的每個(gè)實(shí)例都包含一個(gè)隱形指針,指向Person.prototype熔恢,換句話(huà)說(shuō)脐湾,它們與構(gòu)造函數(shù)沒(méi)有直接關(guān)系。
可以用isPrototypeof( ) 來(lái)判定一個(gè)“實(shí)例”是否指向某個(gè)“原型對(duì)象”叙淌;也可以理解為某個(gè)實(shí)例是否源于某個(gè)原型對(duì)象秤掌。
alert(Person.prototype.isPrototypeof(p1 )) 返回true,說(shuō)明p1指向Person.prototype,
Person.prototype 是實(shí)例p1的原型對(duì)象鹰霍。