JS中new的運行方式


在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__是指向本對象的原型對象的指針。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM