中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript代碼組織結構良好的特點有哪些

發布時間:2021-11-06 15:36:16 來源:億速云 閱讀:137 作者:iii 欄目:web開發

本篇內容主要講解“JavaScript代碼組織結構良好的特點有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“JavaScript代碼組織結構良好的特點有哪些”吧!

 隨著JavaScript項目的成長,如果你不小心處理的話,他們往往會變得難以管理。我們發現自己常常陷入的一些問題: 當在創建新的頁面時發現,很難重用或測試之前寫的代碼。

  當我們更深處地研究這些問題,我們發現根本原因是無效的依賴管理造成的。比如,腳本A依賴腳本B,并且腳本B又依賴腳本C,當C沒有被正確引入時,整個依賴鏈就無法正常工作了。

  為了解決這個問題,我們已經采取了異步模塊定義(AMD)的模式,并引入require.js到我們的技術堆棧。經過對AMD的進一步探索,我們已經基本確定,組織嚴密的JavaScript一般都呈現以下五個特點:

  始終聲明我們的依賴 為第三方代碼庫添加shim(墊片) 定義跟調用應該分離 依賴應該異步加載 模塊不應依賴全局變量

  讓我們詳細討論一下。

  始終聲明我們的依賴

  我們最常碰到了的一個問題是,我們會經常忽略那些會被確定加載的依賴項。舉例來說,如果我們創建了一個jQuery插件,一般認為沒有必要申報jQuery的依賴,因為它在大多數頁面都是默認裝載的。雖然這似乎適用于大多數的網頁,但當我們試圖進行單元測試或在一個全新的頁面加載時,它就變成一個問題。

  始終聲明我們的依賴,我們就消除了JavaScript中90%的問題。可重用的代碼變得更可靠,單元測試的數量增加了4倍也是一個因素。

  為第三方代碼庫添加shim(墊片)

  在管理JavaScript依賴時經常碰到的一個有趣問題是,較舊的第三方庫可能無法和您的依賴關系管理系統配合工作。例如,你們內部使用了jQuery的一個很酷的插件,但它對require.js一無所知。這會成為一個問題,因為第一個特點,我們來添加對這個插件的引用。
  解決的辦法是通過依賴管理工具為這個插件制作一個墊片。在require.js中,這可以很容易地通過配置來完成:

  var require = {

1. <p><font size="3">  "shim": {</font></p>

2. <p><font size="3">  "lib/cool-plugin": {</font></p>

3. <p><font size="3">  "deps": ["lib/jquery"]</font></p>

4. <p><font size="3">  }</font></p>

5. <p><font size="3">  }</font></p>

6. <p><font size="3">  }</font></p>

  有了這個簡單的配置,每一個加載 lib/cool-plugin.js 的腳本都會自動加載jQuery。將有助于滿足所有相關性.

  最終的結果是代碼更容易測試和重用,因為你總是有一個require()來調用所需的功能。

  定義跟調用應該分離

  這是限制JavaScript代碼的可重用性和可測試性的一個常見問題。問題表現在一個單一的文件即定義了一個類/函數又調用了它。考慮下面的代碼:

  ## js/User.js

1. <p><font size="3">  define(functino(require) {</font></p>

2. <p><font size="3">  var User = function(name, greeter) {</font></p>

3. <p><font size="3">  this.name = name;</font></p>

4. <p><font size="3">  this.greeter = greeter;</font></p>

5. <p><font size="3">  };</font></p>

6. <p><font size="3">  User.prototype.sayHello = function() {</font></p>

7. <p><font size="3">  this.greeter("Hello, " + this.name);</font></p>

8. <p><font size="3">  };</font></p>

9. <p><font size="3">  var user = new User('Alice', window.alert);</font></p>

10. <p><font size="3">  user.sayHello();</font></p>

11. <p><font size="3">  });</font></p>

  在這個例子中,一個單一的文件即定義了User類又調用它。這將很難重用這個代碼,因為只要加載這個腳本就會出現alert。同樣greeter這個非常難以測試。

  解決的辦法是保持定義和執行的分離。這有助于確保可重用性和可測性:

  ## js/User.js

1. <p><font size="3">  define(functino(require) {</font></p>

2. <p><font size="3">  var User = function(name, greeter) {</font></p>

3. <p><font size="3">  this.name = name;</font></p>

4. <p><font size="3">  this.greeter = greeter;</font></p>

5. <p><font size="3">  };</font></p>

6. <p><font size="3">  User.prototype.sayHello = function() {</font></p>

7. <p><font size="3">  this.greeter("Hello, " + this.name);</font></p>

8. <p><font size="3">  };</font></p>

9. <p><font size="3">  return User;</font></p>

10. <p><font size="3">  });</font></p>

11. <p><font size="3">  ## js/my-page.js</font></p>

12. <p><font size="3">  define(functino(require) {</font></p>

13. <p><font size="3">  var User = require('js/User');</font></p>

14. <p><font size="3">  var user = new User('Alice', window.alert);</font></p>

15. <p><font size="3">  user.sayHello();</font></p>

16. <p><font size="3">  });</font></p>


  這種變化,User類可以安全地在許多腳本中重用。

  依賴應該異步加載

  因為試圖同步加載腳本會導致瀏覽器鎖死,這是非常重要的,你的腳本和你的模塊應該使用異步加載機制。 Require.js在默認情況下,所有異步加載你的模塊,只有所有的的依賴都加載完以后才會執行你的模塊代碼的函數。

  通過使用一個閉包,我們可以進一步利用“use strict”的好處。

  模塊不應依賴全局變量

  為了進一步加強我們的JavaScript代碼庫,我們已經(幾乎)完全消滅了全局變量(除了由require.js提供的全局變量,如require()和define())。全局變量是臭名昭著的潛在的進入模塊的“隱藏的依賴關系”,它會使代碼很難重用或測試。

  Require.js也讓我們轉換第三方全局變量,require() - 通過墊補功能能模塊。在這個例子中,lib/calculator 創建一個全局的計算器對象,這個庫是被require化的。

  var require = {

1. <p><font size="3">  "shim" : {</font></p>

2. <p><font size="3">  "lib/calculator": {</font></p>

3. <p><font size="3">  "export": "Calc"</font></p>

4. <p><font size="3">  }</font></p>

5. <p><font size="3">  }</font></p>

6. <p><font size="3">  }</font></p>

到此,相信大家對“JavaScript代碼組織結構良好的特點有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

信宜市| 准格尔旗| 澄江县| 仲巴县| 阿拉善左旗| 苏州市| 永吉县| 乳源| 镇平县| 商城县| 定州市| 凤翔县| 霍林郭勒市| 江川县| 延长县| 望城县| 青铜峡市| 荆州市| 融水| 四平市| 同江市| 噶尔县| 固始县| 凤凰县| 寿光市| 江孜县| 马山县| 宁南县| 平果县| 海宁市| 阳原县| 册亨县| 高安市| 丰镇市| 陕西省| 方城县| 绥德县| 苍南县| 眉山市| 石楼县| 远安县|