最近,我讀了MDN documentation on the new
operator,我被它用來做什麼的簡潔描述來襲:是否有可能在JS中重新創建「新」運算符?
當執行代碼新富(...),下面的事情發生:
- 創建一個新對象,繼承自Foo.prototype。
- 構造函數Foo被調用指定的參數,並綁定到新創建的對象。
new Foo
相當於new Foo()
,即如果沒有指定參數列表,Foo被稱爲 沒有參數。- 構造函數返回的對象成爲整個新表達式的結果。如果構造函數不顯式返回對象,則使用步驟1中創建的對象代替 。 (通常構造函數不返回值,但可以 選擇這樣做,如果他們想覆蓋正常的對象創建 過程。)
好像沒有這些東西都是特權操作,那麼是否有可能用其他語言結構完全重新創建new
的動作?
請注意,我不計數Reflect.construct
,因爲它的定義是「它像新函數一樣起作用」。
公告自ES6以來,你必須使用'Reflect.construct',上面的描述來自ES5,一些內建函數和使用'class'語法*定義的構造函數區分被調用爲構造函數和被調用的方法 – Bergi