在開(kāi)始學(xué)習(xí) javascript?時(shí)候我們就被清楚地告知在?JavaScript?的世界里牍汹,函數(shù)是一等公民砂心。這里沒(méi)有類(lèi)概念彻秆,但是?class?那時(shí)候卻作為關(guān)鍵字被保留楔绞。我們通過(guò)各種各樣的方式來(lái)實(shí)現(xiàn)類(lèi)的功能。我們定義匿名函數(shù)唇兑,然后賦值給變量就可以通過(guò)關(guān)鍵字?new?調(diào)用這個(gè)?Car?了酒朵。
通過(guò)?new?來(lái)調(diào)用一個(gè)函數(shù)和通過(guò)普通方式調(diào)用一個(gè)函數(shù)有什么不同呢?
這里介紹一個(gè)判斷是通過(guò)?new?還是通過(guò)普通方式?調(diào)用一個(gè)函數(shù)方法扎附,就是通過(guò)?new.target?來(lái)判斷的蔫耽。
如果是通過(guò)?new?來(lái)調(diào)用函數(shù)時(shí),通過(guò)?new.target?得到[function:Car]?否則為?undefined留夜。
所以如果你想要強(qiáng)迫用戶(hù)通過(guò)?new?而不是普通調(diào)用你創(chuàng)建的函數(shù)可以采用下面方式匙铡。
在?es6?給我們常見(jiàn) class?方式,我們不必五花八門(mén)通過(guò)函數(shù)來(lái)創(chuàng)建類(lèi)碍粥,不過(guò)打印一下他類(lèi)型還是函數(shù)鳖眼,并不是什么新鮮的東西。
但是如果我們想用調(diào)用函數(shù)方式來(lái)調(diào)用這個(gè)類(lèi)時(shí)候就會(huì)受到錯(cuò)誤提示嚼摩。
因?yàn)樵?JavaScript?中沒(méi)有構(gòu)造函數(shù)重載的問(wèn)題钦讳,所有這里與?java?不同,給我我們一個(gè)構(gòu)造函數(shù)方法枕面。然后可以輕松地實(shí)現(xiàn)定義愿卒。
定義一個(gè)方法也是很容易的。這里我們?yōu)?Car?定義了一個(gè) drive?的方法潮秘。