在JS中,有兩個基礎原型,分別是Function.prototype和Object.prototype。這兩個原型組成了JS中的所有實例他們的關系是 Function.prototype ----> Object.prototype ----> null。
常用的創建類的有兩種方法,我們從這兩種方法講兩種prototype的關系。
第一種是先有一個原型,直接令新的對象的__proto__指向已經有的原型。這種時候可以類比繼承關系,但區別是把那個原型的狀態(如屬性的取值等)也一並繼承過來了。
但是記住這個時候新的對象從原型繼承的值如果沒有被初始化/賦值,原型中的值改變的話,新的對象中的對應值也會改變。
第二種是使用new來繼承,new在JS里這樣運行:
1.創建一個最基礎的Object對象(內容為空 )並且初始化。
2.把后面的構造函數放進剛創建的obj中,並且設置__proto__為函數的對象。
3.使用創建出的對象作為obj,在obj中執行那個函數,,當然那個函數要對剛創建的這個對象進行初始化,然后返回。
4.如果返回的是Object對象,new就返回這個對象,否則返回剛創建的obj。
這里解釋一下函數的原型類型:
比如說有
function A(){ var a = 1;};
那么A是一個Object,他的constructor就是A(),平時調用A()就相當於調用A這個Object的構造函數。
PS:prototype屬性是該對象作為proto的時候的類型。__proto__是指向本對象的原型對象的指針。