自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

經(jīng)典范例:7個JavaScript優(yōu)秀實踐

開發(fā) 前端
根據(jù)我頭兩年接觸JavaScript的經(jīng)歷,如果你是一名JavaScript新手,可能會對這部分有些陌生。

 1. 編寫構(gòu)造函數(shù)時,在 .prototype上添加方法

根據(jù)我頭兩年接觸JavaScript的經(jīng)歷,如果你是一名JavaScript新手,可能會對這部分有些陌生。

(請記住,這并不適用于類,因為類已經(jīng)將方法附加到它們的prototype上。)

以下是構(gòu)造函數(shù)的一個示例:

 

  1. functionFrog(name, gender)  { 
  2.   this.namename 
  3.   this.gender= gender 
  4. Frog.prototype.leap=function(feet) { 
  5.   console.log(`Leaping ${feet}ft into the  air`) 

 

為什么不像以下示例一樣,直接附加leap方法呢?

 

  1. functionFrog(name, gender)  { 
  2.   this.namename 
  3.   this.gender= gender 
  4.   this.leap=function(feet) { 
  5.     console.log(`Leaping ${feet}ft into the  air`) 
  6.   } 

 

當把方法直接添加到prototype時,它們將在構(gòu)造函數(shù)創(chuàng)建的所有實例之間共享。

換句話說,使用上個例子,如果創(chuàng)建三個獨立的 Frog (從 this.leap = function() {...}),然后以創(chuàng)建三個獨立的副本結(jié)束。這是一個問題,因為leap方法總是保持不變,不需要在實例上建立自己的副本。

最終導(dǎo)致本可以避免的性能下降。this.name 和this.gender屬性需要在實例上定義,因為現(xiàn)實生活中,frog可能有自己的名字和性別,所以才在實例級別上創(chuàng)建它們。

這里是流行的request 包使用這種方法的一個示例(在GitHub上)。

2. 使用TypeScript

TypeScript不僅能為類型安全提供強大防御,還能幫助預(yù)防錯誤,已經(jīng)在JavaScript社區(qū)中得到了廣泛應(yīng)用。

使用TypeScript能使編譯器在代碼運行之前對潛在的錯誤進行監(jiān)測并顯示警告。

但這還遠不能解釋為什么TypeScript可以適用于任何情況。TypeScript最好的一點是允許在主流瀏覽器支持之前使用JavaScript中的新特征,因為這些特征被編譯成更早期的JavaScript版本,因此能在舊版本的瀏覽器中運行。

3. 編寫測試

如果要認真處理一個項目,必須使用測試,這樣應(yīng)用程序才更能夠更加可預(yù)測、少出錯、并靈活應(yīng)對未來的變化。換句話說,如果打算做一個經(jīng)得起時間考驗的項目,沒有比在整個代碼中建立測試更好的方法。在代碼中投入的測試越多,將其應(yīng)用于生產(chǎn)環(huán)境后,對它的信心也會越多。

測試最好的部分是什么?是能捕捉錯誤,使其無從出現(xiàn)——有人不想要那種能力嗎?我確定我想要。這就是我在項目中寫單元測試的原因。

 

4. 使用JSON.parse或JSON.stringify時,務(wù)必考慮使用 try/catch

JavaScript中,當把JSON作為輸入傳遞給JSON.parse時,需要一個正確格式的JSON作為第一個參數(shù)。如果格式不正確,會提示JSON解析錯誤。

來自JSON解析錯誤的危險是接受無效的JSON會導(dǎo)致應(yīng)用程序崩潰。最近我們的一個web項目失敗了,因為另一個內(nèi)置程序包沒有在try/catch里安裝JSON.parse 。最終導(dǎo)致了web頁面失效,而且由于JavaScript運行時被破壞,除非內(nèi)置程序包修復(fù)它,否則無法修正錯誤。

 

  1. SyntaxError: Unexpected token }in JSON at position 107 

不應(yīng)總是期望有效的JSON輸入,因為它會收到如“>”的奇怪字符,這在今天是很常見的。

5. 使用常規(guī)的.type屬性進行區(qū)分

這個方法很棒,得到了廣泛使用。React開發(fā)人員可能每天都能看到這種做法,特別是使用Redux工作時。

使用類似方法也能使開發(fā)流程變得無比簡單,因為它甚至可以很好的記錄自己。

 

  1. functioncreateSpecies(type, name,  gender) { 
  2.   if (type ==='frog') { 
  3.     returncreateFrog(name, gender) 
  4.   } elseif (type ==='human') { 
  5.     returncreateHuman(name, gender) 
  6.   } elseif (type == undefined) { 
  7.     thrownewError('Cannot create  a species with an unknown type'
  8.   } 
  9. const myNewFrog =createSpecies('frog''sally''female'

 

6. 使用工廠函數(shù)(factory function)

如果你不知道什么是工廠函數(shù),那么它就是一個返回對象的函數(shù)(它既不是類,也不是構(gòu)造函數(shù))。通過這個簡單概念,就可以利用JavaScript及其特征來創(chuàng)建強大健壯的應(yīng)用程序。

必須知道,當函數(shù)被new關(guān)鍵字調(diào)用時,該函數(shù)就不再是工廠函數(shù)了。

為什么要用工廠函數(shù)?

使用工廠函數(shù)可以輕松的生成對象實例,且無需涉及類或new關(guān)鍵字。

其本質(zhì)上意味著,它們最終會被當做函數(shù)來對待,即可用于組合對象、函數(shù),甚至Promise函數(shù)。這表明可以將工廠函數(shù)混合搭配,以創(chuàng)建一個升級版工廠函數(shù),然后繼續(xù)和別的函數(shù)或?qū)ο蠼M合創(chuàng)建成更強的工廠函數(shù)。其可能性是無窮無盡的。

考慮到這一點,將其與好的代碼實踐相結(jié)合,它便開始大放光彩了。

以下是工廠函數(shù)的一個簡單示例:

 

  1. functioncreateFrog(name) { 
  2.   const children = [] 
  3.   return { 
  4.     addChild(frog) { 
  5.       children.push(frog) 
  6.     }, 
  7.   } 
  8. const mikeTheFrog =createFrog('mike'

 

當使用足夠多的工廠函數(shù)后,會意識到工廠函數(shù)比類構(gòu)造函數(shù)有更強的可重用性。這減少了代碼量,縮短了代碼重構(gòu)時間(因為工廠函數(shù)最終會返回任意對象),縮短了從一個代碼到另一個代碼的管理時間。

7. 使函數(shù)盡可能的簡單

眾所周知,在JavaScript中很可能有同時做很多事情的大型函數(shù)。

編程新手可能覺得這是一件好事——之前當我寫了很大篇幅可以工作的代碼后,我的自我感覺非常好。這對我來說很重要,并給予我很大信心。畢竟它能正常運行,我就把自己的代碼有多么冗長這件事拋之腦后了。天哪,當時太幼稚了。

如果想寫更易維護的、簡單的、少出錯的代碼,最好使它盡量簡潔短小。代碼越簡潔,單獨測試也會越容易。

如果你更喜歡函數(shù)式編程范式,這一點尤其重要。函數(shù)執(zhí)行一件事就應(yīng)該把它做好,這是常識。

希望對你有用,獲得更完美的JavaScript的優(yōu)秀實踐。

責任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2020-02-25 20:55:20

JavaScript開發(fā) 技巧

2021-05-26 08:50:37

JavaScript代碼重構(gòu)函數(shù)

2022-11-28 23:48:06

JavaScript編程語言技巧

2023-10-10 10:57:12

JavaScript代碼優(yōu)化

2011-08-04 13:58:45

JavaScript

2020-02-07 10:46:43

多云云計算混合云

2024-04-11 10:20:57

JavaScript前端Web

2020-04-30 21:30:18

JavaScript前端技術(shù)

2022-02-23 09:03:29

JavaScript開發(fā)命名約定

2021-06-30 10:10:01

企業(yè)攻擊漏洞網(wǎng)絡(luò)安全

2024-05-31 08:30:23

2023-07-03 12:09:38

云日志云服務(wù)

2020-09-03 07:00:00

Salesforce測軟件測試

2020-04-02 15:45:24

JavaScript開發(fā) 模塊

2020-03-02 09:26:16

JavaScript程序員JSON

2020-03-24 14:45:17

程序員技能開發(fā)者

2022-10-10 14:53:00

云安全云計算云平臺

2020-11-24 10:32:16

CIO首席信息官工具

2022-12-26 07:52:33

DockerfileFROM命令

2021-03-01 19:24:13

Kubernetes備份容器
點贊
收藏

51CTO技術(shù)棧公眾號