mdn new
new 調用函數時,該函數將被用作構造函數
類只能用 new 運算符實例化
不使用 new 調用一個類將拋出 TypeError。
過程
new Foo(…) 執行時:
-
創建一個空的簡單 JavaScript 對象。
為方便起見,我們稱之為newInstance
。 -
如果構造函數的 prototype 屬性是一個對象,則將
newInstance
的[[Prototype]]
指向構造函數的這個屬性;
否則newInstance
將保持為一個普通對象,其[[Prototype]]
為Object.prototype
。備注:通過構造函數創建的所有實例都可以訪問添加到構造函數 prototype 屬性中的屬性/對象。
-
使用給定參數執行構造函數,并將
newInstance
綁定為this
的上下文,
在構造函數中的所有 this 引用都指向 newInstance。 -
如果構造函數返回 引用類型,則該返回值作為 new 表達式的結果。
否則返回構建好的newInstance
。