js原型,原型鏈

先鋪墊下原型規則:數組

1.全部的引用類型(數組,對象,函數)都具備對象特性,可自由擴展屬性(出了null外)瀏覽器

 

2.全部的引用類型(數組,對象,函數)都有一個__proto__屬性(隱式原型),屬性值是一個對象函數

 

3.全部的函數都有一個prototype屬性(顯示原型),屬性值是一個對象spa

 

 4.全部的引用類型(數組,對象,函數),__protot__屬性值指向他的構造函數的prototype屬性值(new出來對象自身的(__protot__)隱式原型就是他構造函數的(prototype)顯示原型)prototype

 

5.當試圖去獲得一個對象的某個屬性時,若是這個對象自己沒有這個屬性,那麼會去他的__proto__(即他的構造函數的prototype)中尋找對象

 

看例子:blog

 

 

例子中new出來的f對象是隻有name屬性(第3行建立的)和printName方法(第10行建立的),第15行中調用f.alertName.alertName直接在f對象自己中是沒有的,那麼會去他的__proto__(即他的構造函數Fooprototype)中尋找(在第5行)原型鏈

這就引出了原型鏈原型

 

當咱們訪問對象的一個屬性或方法時,它會先在對象自身中尋找,若是有則直接使用,
若是沒有則會去原型對象中尋找,一直往上找(像冒泡同樣),瀏覽器防止無限循環,找到最上層就是object了(祖先),再往上找就是null擴展

 

拓展:

使用hasOwnProperty()方法來檢查該屬性是new出實例對象自身中含有的仍是在原型中含有的,當對象自身中含有屬性時,會返回true,

對比in,使用in檢查對象中是否含有某個屬性時,若是對象中沒有可是原型中有,也會返回true,因此hasOwnProperty()更嚴格,

相關文章
相關標籤/搜索