Amaze UI JavaScript 規(guī)范

2018-10-30 20:11 更新

1.基本編碼規(guī)范

2.代碼質(zhì)量控制工具

Amaze UI 使用 JSHintJSCS ESLint控制代碼質(zhì)量。
詳細設(shè)置參見 .jshintrc、.jscsrc.eslintrc。
2016.04.20 替換為 ESLint,參見 Welcoming JSCS to ESLint
(部分直接使用第三方庫的代碼未通過質(zhì)量控制工具檢測。)

3.jQuery / Zepto.js 使用規(guī)范

為提高代碼執(zhí)行效率,為二者兼容提供可能,在使用 jQuery / Zepto.js 時做以下約定:
  • 存放 jQuery / Zepto 對象的變量以 $ 開頭;
  • 禁止使用 slideUp/Down() fadeIn/fadeOut() 等方法;
  • 盡量不使用 animate() 方法;
  • 使用和 Zepto.js 兼容的基本選擇符,不使用效率較低且與 Zepto.js 不兼容的選擇符。
問題:

4.代碼格式

  • 縮進 2 個空格;
  • 使用多 var 模式聲明變量:更容易維護,比如要刪除第一個變量或者最后一個變量時,多 var 模式直接刪除即可,單 var 還要去修改別的行(for 循環(huán)例外);

Valid

var x = 1;
var y = 2;

for (var i = 0, j = arr.length; i < j; i++) {
}
Invalid

var x = 1,
    y = 2;

5.命名規(guī)范

5.1 基本原則
  1. 文件和目錄名只能包含 [a-z\d\-],并以英文字母開頭
  2. 首選合適的英文單詞
  3. Data API 命名使用小寫、用連字符連接、添加 am 命名空間,如 data-am-trigger
  4. 事件名使用小寫字母,包含模塊名及 amui 命名空間名,使用 : 連接(Zepto 不支持使用 . 鏈接的自定義事件),如 .trigger('open:modal:amui')
  5. 符合規(guī)范
  • 常量全大寫 UPPERCASE_WORD
  • 變量駝峰 camelName
  • 類名駝峰,并且首字母要大寫 CamelName
5.2 HTML Data API

  • 基本: data-am-{組件名},如 data-am-modal、data-am-navbar-qrcode
  • 傳參: data-am-modal="{key1: 'val1', key2: false}",core.js 中增加一個專門解析參數(shù)的函數(shù)
5.3 JavaScript

  • 自定義事件命名:{自定義事件名}:{組件名}:{后綴},Zepto 不支持 . 分隔的自定義事件語法,官方示例中使用 : 分隔,如 closed:modal:amui。Zepto 中沒有 event.namespace,這樣的命名方式只用于清晰區(qū)分不同模塊的自定義事件。另外,按照 Zepto 官方示例,應(yīng)該寫成 amui:modal:closed,為跟 jQuery 的寫法統(tǒng)一,顛倒順序書寫。
  • 默認綁定事件:事件名(內(nèi)置事件,非自定義事件)采用 {事件名}.{組件名}.{命名空間},如 $(document).on('click.modal.amui',...。
    • 取消所有默認綁定事件: $(document).off('.amui',...
    • 取消特定組件的默認綁定事件: $(document).off('.modal.amui',...

6.接口命名規(guī)范

通過接口規(guī)范,統(tǒng)一模塊對外接口的命名,形成一致的編寫習(xí)慣。
規(guī)則:
  • 可讀性強,見名曉義。
  • 盡量不與 jQuery 社區(qū)已有的習(xí)慣沖突。
  • 盡量寫全。不用縮寫,除非是下面列表中約定的。(變量以表達清楚為目標(biāo),uglify 會完成壓縮體積工作)
常用詞說明
options表示選項,與 jQuery 社區(qū)保持一致,不要用 config, opts 等
active表示當(dāng)前,不要用 current 等
index表示索引,不要用 idx 等
trigger觸點元素
triggerType觸發(fā)類型、方式
context表示傳入的 this 對象
object推薦寫全,不推薦簡寫為 o, obj 等
element推薦寫全,不推薦簡寫為 el, elem 等
length不要寫成 len, l
prevprevious 的縮寫
nextnext 下一個
constructor不能寫成 ctor
easing示動畫平滑函數(shù)
minminimize 的縮寫
maxmaximize 的縮寫
DOM不要寫成 dom, Dom
.hbs使用 hbs 后綴表示模版
btnbutton 的縮寫
link超鏈接
title主要文本
img圖片路徑(img標(biāo)簽src屬性)
datasethtml5 data-xxx 數(shù)據(jù)接口
theme主題
className類名
classNameSpaceclass 命名空間

7.注釋規(guī)范

7.1總原則
  • As short as possible(如無必要,勿增注釋):盡量提高代碼本身的清晰性、可讀性。
  • As long as necessary(如有必要,盡量詳盡):合理的注釋、空行排版等,可以讓代碼更易閱讀、更具美感。
總之,注釋的目的是: 提高代碼的可讀性,從而提高代碼的可維護性。

7.2 什么時候需要添加注釋
  • 某段代碼的寫法,需要注釋說明 why 時:
// Using loop is more efficient than `rest = slice.call(arguments, 1)`.
for (i = 1, len = arguments.length; i < len; i++) {
    rest[i - 1] = arguments[i];
}
  • 添加上注釋,能讓代碼結(jié)構(gòu)更清晰時:
init: function(selector, context, rootjQuery) {
    var match, elem, ret, doc;

    // Handle $(""), $(null), or $(undefined)
    if ( !selector ) {
        ...
    }

    // Handle $(DOMElement)
    if ( selector.nodeType ) {
        ...
    }

    // The body element only exists once, optimize finding it
    if ( typeof selector === "string" ) {
        ...
     }
}
  • 有借鑒、使用第三方代碼,需要說明時:
// Inspired by https://github.com/jquery/jquery/blob/master/src/core.js
function ready() {
    ...
}
  • 文件最后空一行,可以保證在 combo 合并后,源碼的層次清晰。

7.3 注釋書寫規(guī)范

  1. 源碼中的注釋,推薦用英文。
  2. 含有中文時,標(biāo)點符號用中文全角。
  3. 中英文夾雜時, 英文與中文之間要用一個空格分開。
  4. 注釋標(biāo)識符與注釋內(nèi)容要用一個空格分開:// 注釋 與 /* 注釋 */。

8.文檔規(guī)范

8.1 README.md
每個組件必須有 README.md 文件,用來描述組件的基本情況。
# 模塊名稱

-----

該模塊的概要介紹。

------

## 使用說明

如何使用該模塊,可以根據(jù)組件的具體特征,合理組織。

## API

需要提供 API 說明,屬性、方法、事件等。

## 使用示例
8.2 HISTORY.md
記錄組件的變更,最好和 issues 進行關(guān)聯(lián)。請閱讀歷史記錄書寫規(guī)范。

9.參考鏈接

Amaze UI 的編碼規(guī)范參考了社區(qū)里一些先行者的做法,在此致謝!

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號