興緻勃勃地定義了下面這麼個構造函數:
定義構造函數結束後呢?沒錯,趕緊執行個體化:
這個coder兄弟叫什麼名字?趕緊列印下:
= =b 竟然是undefined!!再回過頭看看執行個體化的那個語句,不難發現問題出在哪裡:少了個new
關于this指針的指向問題不是本文讨論的内容,可以參考下犀牛書相關章節
這樣的錯誤貌似挺低級的,但出現的機率挺高的,腫麼去避免或減少這種情況的發生呢?
可以在内部實作裡面動下手腳:
其實很簡單,執行個體化的時候,内部判斷下,目前this指向的對象的類型即可,如果非目前構造函數的類型,強制重新調用一遍構造函數。
突然覺得coder這名字不夠洋氣?想用hacker,好吧,我改。。。數了下,一共有三處要改,這不科學,有沒有辦法隻把構造函數的名字改了就行?
當然有:
tips:據說在es 5的嚴格模式下面arguments.callee會被禁用,不過僅當es 5普及同時你指定了要使用嚴格模式,否則還是可以用的
發散下思維:在jq裡面包打天下所向披靡的$,大家都知道它會傳回一個jquery對象,如下:
有沒有發現,這裡同樣沒有new!應該猜到怎麼回事了吧。原理是差不多的,不過裡面的實作要複雜得多,有空再把jq裡面的實作拔下寫下總結
over