鋪墊
__proto__和constructor屬性是物件所獨有的,prototype屬性是函式所獨有的
在JS中函式也是一種物件,函式也擁有__proto__和constructor屬性
物件由函式生成。生成物件時,物件的__proto__屬性指向函式的prototype屬性
演示程式碼
function Foo(){...};
var f1 = new Foo();
建立一個建構函式Foo(),並用new關鍵字例項化,得到例項化物件f1
型別的原型(prototype)
prototype是函式所獨有的,它是從一個函式指向一個物件,所指的物件就是函式的原型物件
作用: 讓函式所例項化的物件都可以找到公用的屬性和方法
幾乎所有的函式在建立時,會預設建立該函式的prototype物件
原型(proto)
__proto__屬性是物件所擁有的,__proto__屬性都是由一個物件指向另一個物件,也就是指向它們的原型物件(也可以理解為父物件)
作用: 當訪問一個物件的屬性時,如果該物件內部不存在這個訪問的屬性,則會去它的__proto__屬性所指的物件(父物件)裡尋找,如果父物件不存在這個屬性,則繼續往祖先物件的__proto__所指的物件(爺爺物件)裡尋找,一直往上尋找...直到原型鏈頂端null,此時如果繼續往上相當於在null上取屬性,系統就會報錯(null可以理解為原型鏈的終點,到該點時結束),以上從訪問的物件到null的一條鏈,我們稱為原型鏈
我們平時呼叫多數方法都是靠__proto__繼承的
prototype所指的函式原型物件和__proto__所指原型物件是不同的
建構函式(constructor)
Constructor也是物件才擁有的,他是由一個物件指向函式,指向該物件的建構函式,每個物件都有建構函式(本身擁有或繼承,繼承要結合__proto__屬性檢視),Function這個物件的建構函式是它自己本身,所有函式和物件最終都是由Funtion建構函式得來的,Constructor屬性的終點即為Function這個函式
原型與原型鏈
這些圖都是本人自己做的,轉載請帶上鍊接,謝謝配合