天天看點

【經驗總結】構造函數的強制調用

興緻勃勃地定義了下面這麼個構造函數:

定義構造函數結束後呢?沒錯,趕緊執行個體化:

這個coder兄弟叫什麼名字?趕緊列印下:

= =b 竟然是undefined!!再回過頭看看執行個體化的那個語句,不難發現問題出在哪裡:少了個new

關于this指針的指向問題不是本文讨論的内容,可以參考下犀牛書相關章節

這樣的錯誤貌似挺低級的,但出現的機率挺高的,腫麼去避免或減少這種情況的發生呢?

可以在内部實作裡面動下手腳:

其實很簡單,執行個體化的時候,内部判斷下,目前this指向的對象的類型即可,如果非目前構造函數的類型,強制重新調用一遍構造函數。

突然覺得coder這名字不夠洋氣?想用hacker,好吧,我改。。。數了下,一共有三處要改,這不科學,有沒有辦法隻把構造函數的名字改了就行?

當然有:

tips:據說在es 5的嚴格模式下面arguments.callee會被禁用,不過僅當es 5普及同時你指定了要使用嚴格模式,否則還是可以用的

發散下思維:在jq裡面包打天下所向披靡的$,大家都知道它會傳回一個jquery對象,如下:

有沒有發現,這裡同樣沒有new!應該猜到怎麼回事了吧。原理是差不多的,不過裡面的實作要複雜得多,有空再把jq裡面的實作拔下寫下總結

over

繼續閱讀