原型與原型鏈學習筆記

1、對象都是由函數(shù)創(chuàng)建出來的

例如:var a= new Object();var b=new Function();var c=new Array();像這些Object、FunctionArray都是函數(shù)。
在實際工作中我們是這樣寫的var a={};var b=function(){};var c=[];;這兩者本質上是沒有任何區(qū)別的,后者只是一種快捷方式,在編程語言中,一般叫做“語法糖”。

2、函數(shù)也是對象(雞生蛋還是蛋生雞的問題了)

函數(shù)也是對象,并且有一個默認的屬性prototype。
看下圖:

Paste_Image.png

我們創(chuàng)建了一個superType函數(shù),可以看到superType.prototype也是一個對象:

superType.prototype={
    constructor:function(),
    __proto__:Object
}

這個對象有兩個屬性,其中constructor指向一個函數(shù),這個函數(shù)即是superType。

Paste_Image.png

另外一個屬性__proto__的值則是一個對象。

3、每個函數(shù)function都有一個prototype,即原型;每個對象都有一個__proto__

每個對象的__proto__都指向創(chuàng)建該對象的函數(shù)——的prototype。

一步一步來:

  1. 創(chuàng)建該對象的函數(shù):可以是Array、Object、Fucntion 或者自定義的函數(shù).
  2. 上一步函數(shù)的prototype

4、 Object.prototype__proto__指向null

這個對象(Object.prototype)的__proto__屬性是個特例。否則的話就就無休止了。

結合上面幾點來理解下面這張圖片

Paste_Image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容