前言
還記得函式建構子是如何運作的嗎?當執行環境執行時, this
變數指向空物件,如果不回傳任何東西的話,預設回傳新物件。而當我們用函式建構子時,它們仍然是一般的函式,只是在前面加上 new
運算子,然而危險的部分也在這裡。
使用先前的範例來說明:
1 | function person(firstName, lastName){ |
如果把 new
運算子拿掉會如何呢?
當我們忘記放上 new
關鍵字時,後面跟著的是一般的無回傳函式,所以運行後沒有回傳任何東西給變數,因此變數的值為 undefined
。
當取用 getFormalFullName
方法時,因為此時 john
並非物件,而是 undefined
,所以沒辦法到原型鏈上尋找方法,因此跳出錯誤。
如何避免忘記放上 new 呢?
課程中講師有提到似乎有一些約定成俗的習慣,就是:
任何要做為函式建構子的函式,首字母大寫
這樣子就能馬上認出哪個地方少了 new
運算子,或者是使用 Linters 輔助撰寫程式碼。