原型與原型鏈 - 物件與函式關係筆記

獨舟者發表於2020-10-23

鋪墊

__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這個函式

原型與原型鏈

這些圖都是本人自己做的,轉載請帶上鍊接,謝謝配合

相關文章