日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
JavaScript重構(gòu) 模塊劃分和命名空間

通常我們的團(tuán)隊(duì)中,開發(fā)人員在Java語言層面具備相當(dāng)?shù)募夹g(shù)素養(yǎng),經(jīng)驗(yàn)豐富,而且有許多成熟的、合理的規(guī)約,類型繁多的代碼隱患檢查工具,甚至在團(tuán)隊(duì)間還有計(jì)劃內(nèi)的評(píng)審和飛檢。但是前端的代碼不似后臺(tái),就像一個(gè)沒人疼的孩子,不僅僅容易被低估、被輕視,導(dǎo)致質(zhì)量低劣、可維護(hù)性差,技能上,更缺少優(yōu)秀的前端開發(fā)人員。

10年積累的網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先做網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有復(fù)興免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

JavaScript是前臺(tái)代碼中重要組成部分,隨著版本的延續(xù),產(chǎn)品越做越大,JavaScript層面的重構(gòu),需要在整個(gè)過程中逐步強(qiáng)化起來。

當(dāng)代碼量達(dá)到一定程度,JavaScript最好能夠與頁(yè)面模塊組件(例如自定義的FreeMarker標(biāo)簽)一起被模塊化。

模塊化帶來的最大好處就是獨(dú)立性和可維護(hù)性,不用在海量的js中定位問題位置,簡(jiǎn)單了,也就更容易被理解和接受,更容易被定制。

模塊之間的依賴關(guān)系最好能夠保持簡(jiǎn)單,例如有一個(gè)common.js,成為最通用的函數(shù)型代碼,不包含或者包含統(tǒng)一管理的全局變量,要求其可以獨(dú)立發(fā)布,其他組件js可以輕松地依賴于它。舉個(gè)例子,我們經(jīng)常需要對(duì)字符串實(shí)現(xiàn)一個(gè)trim方法,可是js本身是不具備的,那么就可以在這個(gè)common.js中擴(kuò)展string的prototype來實(shí)現(xiàn),這對(duì)外部的使用者是透明的。

使用命名空間是保持js互不干擾的一個(gè)好辦法,js講究起面向?qū)ο?,就必須遵循封裝、繼承和多態(tài)的原則。

參照J(rèn)ava import的用法,我希望命名空間能帶來這樣的效果,看一個(gè)最簡(jiǎn)單的實(shí)例吧:

我有一個(gè)模塊play,其中包含了一個(gè)方法webOnlinePlay,那么在沒有import這個(gè)模塊的時(shí)候,我希望是js的執(zhí)行是錯(cuò)誤的:

 
 
 
  1. webOnlinePlay(); //Error! 無法找到方法 

但是如果我引入了這個(gè)模塊:

 
 
 
  1. import("play");  
  2. webOnlinePlay(); //正確,能夠找到方法 

其實(shí)實(shí)現(xiàn)這樣的效果也很簡(jiǎn)單,因?yàn)槟J(rèn)調(diào)用一個(gè)方法webOnlinePlay()的實(shí)質(zhì)是:window.webOnlinePlay(),對(duì)嗎?

所以在import("play")的時(shí)候,內(nèi)部實(shí)現(xiàn)機(jī)制如下:

 
 
 
  1. var module = new playModule(); 

對(duì)于這個(gè)模塊中的每一個(gè)方法,都導(dǎo)入到window對(duì)象上面,以直接使用:

 
 
 
  1. window[methodName] = module[methodName]; 

其實(shí)這里并沒有什么玄機(jī),但是這種即需即取的思想?yún)s給前端重構(gòu)帶來了一個(gè)思路,一個(gè)封裝帶來的可維護(hù)性增強(qiáng)的思路,不是嗎?

聰明的你也許還會(huì)提到一個(gè)問題:

如果我沒有import這個(gè)play模塊,這個(gè)頁(yè)面都不需要,那我能否連這個(gè)play.js都不加載呢?

當(dāng)然可以,請(qǐng)關(guān)注后面的分解——關(guān)于js的動(dòng)態(tài)加載的部分。

【編輯推薦】

  1. Web移動(dòng)應(yīng)用 HTML5 CSS和JavaScript
  2. JavaScript開發(fā)規(guī)范要求
  3. javascript面向?qū)ο蠹夹g(shù)基礎(chǔ)(一)
  4. Javascript中閉包的作用域鏈
  5. 讓瀏覽器非阻塞加載javascript的幾種方式

網(wǎng)頁(yè)題目:JavaScript重構(gòu) 模塊劃分和命名空間
標(biāo)題來源:http://m.5511xx.com/article/dpddhpc.html