1. 程式人生 > >面試必問系列之 建構函式,原型物件和例項之間的關係(一)

面試必問系列之 建構函式,原型物件和例項之間的關係(一)

關於建構函式,原型物件,例項之間的關係  ,先來看一張圖,大致瞭解下



1,建構函式

建構函式跟普通函式沒什麼區別,都是由function定義的,為了和普通函式做區別,一般建構函式首字母大寫


像這樣,建構函式可以使用new操作符呼叫,也可以像普通函式那樣呼叫,如果像普通函式那樣呼叫,Person方法會自動新增到window物件中,

2,原型物件

我們每建立一個函式,js內部會根據特定規則(不必關心什麼規則)為這個函式新增一個prototype屬性,這個prototype屬性是一個物件,也就是我們平常說的原型物件,說白了,原型物件真的是一個物件,這個物件的名字是prototype,這個物件隱藏在函式中,原型物件內部會自動包含一個constructor屬性,這個屬性就是一個指標,指向建構函式,表明了建構函式和原型物件之間的關係。


3,例項

我們建立建構函式之後,通過new操作符來呼叫,這樣new出來的例如person1和person2就是例項,我們可以無限制的建立例項,例項中也會自動隱藏一個屬性[[Prototype]] 這個屬性也是一個指標,指向的是原型物件,所以,建構函式,原型物件,例項之間關係就明瞭了,原型物件是建構函式的一個屬性,同時,原型物件的一個預設constructor屬性指向建構函式,例項的[[Prototype]]屬性指向原型物件,注意,[[Prototype]]對指令碼是不可見的,我們只能看到它,無法用到它