JS的new操作到底做了些什麼呢?我們一步一步來看。
例如我定義了一個function,並執行new操作:
function Foo(){} var foo = new Foo();
補補腦:
每一個函數中都會有一個叫prototype的屬性,類型是object,即一個引用對象。
每一個物件中都會有一個叫__proto__的屬性,類型野是object,也是一個引用物件。
首先,當JavaScript引擎執行new操作時,會馬上開啟一個區塊內存,建立一個空物件(並將this指向這個物件)。
接著,執行建構子Foo(),對這個空物件進行建構(建構函式裡有什麼屬性和方法都一一給這個空白物件組裝去,這就是為何它叫建構子了)。
然而,為這個空物件增加了一個叫做__proto__的屬性,而且這個__proto__指向Foo()的prototype物件。換句話說,就是__proto__ = prototype;