国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

網易郵箱前端JavaScript編碼規范

開發 前端
javascript在設計之初就只是用來為HTML添加動態效果的。由于他動態,弱類型等特性,以及不同瀏覽器的兼容性問題,造成了開發成本要比java等語言要高很多。

在多年開發郵箱webmail過程中,網易郵箱前端團隊積累了不少心得體會,我們開發了很多基礎js庫,實現了大量前端效果組件,開發了成熟的opoa框架以及api組件,在此向大家做一些分享。今天想先和大家聊聊javascript的編碼規范。

總所周知,javascript是一種語法極其靈活的語言。javascript在設計之初就只是用來為HTML添加動態效果的。由于他動態,弱類型等特性,以及不同瀏覽器的兼容性問題,造成了開發成本要比java等語言要高很多。正因為它太靈活,我們制定了適用于網易郵箱的javascript編碼規范,盡可能多的降低由于語法靈活造成的問題。以下將具體介紹:

1. 變量命名規范

變量名包括全局變量,局部變量,類變量,函數參數等等,他們都屬于這一類。

基本規范

變量命名都以類型前綴+有意義的單詞組成,單詞首字母都需要大寫。例如:sUserName,nCount。

前綴規范

每個局部變量都需要有一個類型前綴,按照類型可以分為:

s:表示字符串。例如:sName,sHtml;

n:表示數字。例如:nPage,nTotal;

b:表示邏輯。例如:bChecked,bHasLogin;

a:表示數組。例如:aList,aGroup;

r:表示正則表達式。例如:rDomain,rEmail;

f:表示函數。例如:fGetHtml,fInit;

o:表示以上未涉及到的其他對象,例如:oButton,oDate;

例外情況:

1:作用域不大臨時變量可以簡寫,比如:str,num,bol,obj,fun,arr。

2:循環變量可以簡寫,比如:i,j,k等。

為什么需要這樣強制定義變量前綴?正式因為javascript是弱語言造成的。在定義大量變量的時候,我們需要很明確的知道當前變量是什么屬性,如果只通過普通單詞,是很難區分的。

例如:

  1. var group = [];   
  2. group.name = 'myGroup';   
  3. /****   
  4. some code   
  5. ***/ 
  6. //這時候你還能一眼就看出來group是什么嗎? 

又例如:

  1. var checked = false;   
  2. var check = function(){   
  3.     return true;   
  4. }   
  5. /**   
  6. some code   
  7. **/ 
  8. if(check){//可能將checked寫成check,由于不能很快速的發現check是函數,造成邏輯錯誤   
  9.     //do some thing   

如果我們寫成:

  1. var bChecked = false;   
  2. var fCheck = function(){   
  3.     return true;   
  4. }   
  5. /**   
  6. some code   
  7. **/ 
  8. if(bChecked){   
  9.     // do some thing   
  10. }   
  11. if(fCheck()){   
  12.     // do other thing   

就清楚很多了。

全局變量以及常量規范

網易郵箱前端是基于“類”的概念來來開發javascript的(稍后會專門介紹),每個類定義都是在一個閉包函數中,除了在window下有類的定義而外,只允許有兩種變量定義在全局,那就是全局變量和常量。

全局變量使用g作為前綴,定義在window下。例如gUserName,gLoginTime。

某些作為不允許修改值的變量認為是常量,全部字母都大寫。例如:COPYRIGHT,PI。常量可以存在于函數中,也可以存在于全局。

看個例子就 很容易明白為什么要這樣定義了:

  1. var userName = "dongua";   
  2. function checkName(userName){   
  3.     //存在函數參數userName以及全局變量userName,如果要比較兩個值是否相等,必需寫為   
  4.     return window.userName == userName   

如果使用了全局變量的前綴,就十分清晰了。

2. 函數命名規范

統一使用動詞或者動詞[+名詞]形式,例如:fGetVersion(),fSubmitForm(),fInit();涉及返回邏輯值的函數可以使用is,has等表示邏輯的詞語代替動詞。

如果有內部函數,使用__f+動詞[+名詞]形式,內部函數必需在函數***定義。例如:

  1. function fGetNumber(nTotal){   
  2.     if(nTotal<100){   
  3.   nTotal = 100;   
  4.    }   
  5.  return __fAdd(nTotal);     
  6.     
  7.  function __fAdd(nNumber){   
  8.   nNumber++;   
  9.   return nNumber;   
  10.  }   
  11. }   
  12. alert(fGetNumber(30));//alert 101   
  13.  

對象方法實現

對象方法命名使用 f+對象類名+動詞[+名詞]形式;例如 fAddressGetEmail

事件響應函數

某事件響應函數命名方式為觸發事件對象名+事件名或者模塊名+觸發事件對象名+事件名,例如:fDivClick(),fAddressSubmitButtonClick()

3.其他注意事項

1:所有命名***使用英語表示。

2:所有變量名應該明確而必要,盡量避免不必要的容易混淆的縮寫。

3:netease.events.mouse.Handler,而不是 netease.events.mouse.MouseEventHandler。

4:對應的方法應該使用對應的動詞,例如:get/set, add/remove, create/destroy, start/stop, insert/delete, begin/end。

5:應該避免雙重否定意義的變量,例如:bIsNotError, bIsNotFound,不可取。

6:變量應該在最小的范圍內定義,并盡可能的保持最少的活動時間。

7:循環變量***在循環中定義。例如for(var i=0,m=10;i<m;i++){ do something}。

8:盡量避免復雜的條件語句,可以使用臨時的boolean變量代替。

9:一定要避免在條件中執行語句,例如:if((i=3)>2){},不可取。

10:不要在代碼中重復使用相同意義的數字,用一個變量代替,比如 nTotal=100; num= total。

#p#

網易郵箱頁面在window只允許定義三種變量——1:全局變量;2:常量;3:類。任何業務邏輯都需要通過類方法或者示例方法實現。前兩種變量在之前文章中已經介紹,在此不再累述,接下來詳細介紹類定義和使用的規范。

定義類是通過一個閉包完成的:

  1. (function(){   
  2.   //***步:引入存在的類。引入support類   
  3.   var Support = window.Support;    
  4.     
  5.   //$是網易郵箱基礎庫“base”的引用稍后會介紹   
  6.   //第二步:定義類。可以認為返回了一個類定義 function(){},并在window下定義一個Image類   
  7.   var Image = $.createClass("Image");    
  8.     
  9.   //可以認為是jQuery的extend方法    
  10.     
  11.   //第三步:定義類屬性/方法定義   
  12.   $.Object.extend(Image,{   
  13.    _language : null,   //內部屬性   
  14.    getSize  : fImageGetSize   
  15.   });   
  16.   //第四步:定義實例屬性/方法定義   
  17.   $.Object.extend(Image.prototype,{   
  18.    name  : null,   
  19.    url   : null,   
  20.    ext   : null,   
  21.    width  : 0,   
  22.    height  : 0,   
  23.    setName  : fImageSetName,   
  24.    getName  : fImageGetName,   
  25.    init  : fImageInit   
  26.   });   
  27.   //第五步:方法實現    
  28.     
  29.   function fImageGetSize(nWidth,nHeight){   
  30.    return nWidth*nHeight;   
  31.   }    
  32.     
  33.   function fImageSetName(sName){   
  34.    var oImage = this;   
  35.    oImage.name = sName;   
  36.   }    
  37.     
  38.   function fImageGetName(){   
  39.    var oImage = this;   
  40.    return oImage.name;   
  41.   }    
  42.     
  43.   function fImageInit(sUrl){   
  44.    var oImage = this;   
  45.    oImage.url = sUrl;   
  46.    oImage.ext = Support.getExt(sUrl);   
  47.    oImage.width = Support.getWidth(sUrl);   
  48.    oImage.height = Support.getHeight(sUrl);   
  49.   }    
  50.     
  51.  })(); 

我們可以看到,這個閉包完成了以下幾件事情:

1.引入這個類需要用到的其他類。

2.定義這個類。

3.定義類的屬性和方法。

4.定義類的實例屬性和方法。

5.類和實例方法的實現。

在命名上,我們遵循了一下規則:

1.類名***字母必需大寫,例如Image,Support等。

2.屬性名需要是有意義的名詞,首字母小寫,例如oImage.width。

3.方法名需要是有意義的動詞[+名詞],首字母小寫,例如Support.getWidth

4.如果不希望被其他方法調用,需要在屬性或者方法名前面加“_”,例如oImage._language

5.如果不希望被子類調用,需要在屬性或者方法名前加“_”,例如oImage.__fire()

這里需要特別說明以下幾點:

1.方法的定義不是通過匿名函數來定義,而是集中在類定義的下面來實現。這樣的好處是能在最開始將類的屬性方法定義都羅列出來,便于通過源碼查看到對應屬性和方法。

2.在類/實例方法中,使用局部變量代替this。this不是一個好的玩意兒,一不小心就會被this搞暈。使用局部變量能夠盡量避免這樣的問題,也能夠在壓縮混淆的時候效果更好。

3.在實際開發過程中,每個類定義都單獨一個js實現。

除了類的定義,閉包不實現 任何其他邏輯。使用閉包能夠將很多變量約束在閉包作用域中,并且能夠在壓縮混淆中效果更好,除此之外,使用閉包定義類,在之后將介紹到的動態加載成為了一件十分容易的事情,稍后會和大家一起分享。

【編輯推薦】

  1. javascript解決圖片縮放及其優化
  2. JavaScript實現真正可用的任務管理器
  3. JavaScript寫法你更偏向哪個
  4. js大項目代碼的多人合作處理方法
  5. 看JavaScript如何實現頁面自適
責任編輯:張偉 來源: 網易郵箱
相關推薦

2020-11-05 10:20:54

前端編碼規范安全漏洞

2011-09-26 10:50:16

JavaScript

2015-10-19 18:16:15

2012-04-16 18:08:02

網易郵箱

2023-01-03 17:43:39

網易郵箱數倉

2013-04-08 10:33:54

編碼編碼規范

2014-11-13 16:43:45

網易郵箱

2013-04-03 14:25:36

網易郵箱

2015-10-20 23:52:32

數據泄露網易郵箱

2015-01-13 12:31:26

郵箱用戶行為報告

2015-03-18 09:34:47

程序員編碼規范

2013-12-26 14:09:23

2010-07-05 21:49:27

2013-02-26 10:11:36

前端開發Web

2015-10-19 18:18:44

2020-04-16 21:02:35

前端命名規范html規范

2015-01-14 10:11:29

郵箱用戶行為移動辦公

2013-11-12 15:14:50

易信

2012-02-03 14:07:43

2011-06-07 14:49:56

點贊
收藏

51CTO技術棧公眾號

同性恋视频一区| 一区二区三区精品在线| 韩国美女主播一区| 特级毛片在线| 欧美日韩午夜激情| xxxx一级片| 国产精品一卡二卡| 色一情一区二区三区四区| 午夜亚洲福利| 91精品国产综合久久久久久久久 | 91在线观看网站| 亚洲素人在线| 97国产精品久久| 国产一区调教| 久久久久久久久久国产| 国产麻豆精品| 久久久噜噜噜久久| 国产精品一区二区中文字幕| 97国产在线观看| 猛男gaygay欧美视频| 国产成人精品电影久久久| 国产欧美一区| 国产日产欧美精品| 日韩精品dvd| 亚洲最大成人在线| 欧美日本不卡高清| 欧美福利一区二区三区| 乱码第一页成人| 一区二区不卡在线视频 午夜欧美不卡'| 日日夜夜免费精品| 日本福利视频导航| 成人一区二区视频| 三级a在线观看| 亚洲精品精品亚洲| 精品一二三区视频| 日韩一级二级三级精品视频| 少女频道在线观看高清| 亚洲精品中文字幕有码专区| 国产精品久久久久久久久免费高清| 美女久久久久久久| 少妇精品久久久一区二区三区| 国产精品免费网站| 亚洲精选在线| 69精品丰满人妻无码视频a片| 久久一区二区视频| 在线中文字幕视频| 精品久久免费看| 国产成人免费av一区二区午夜 | 999国产在线| 视频在线观看一区二区三区| 亚洲天堂第一区| 日本一区二区三区四区| 日韩男人天堂| 在线播放91灌醉迷j高跟美女 | 欧美三级中文字幕在线观看| 51av在线| 97色在线视频| 亚洲免费大片| 久色视频在线播放| 五月天亚洲精品| 欧美巨大丰满猛性社交| 欧美在线观看视频| 久久精品男女| 国产日本久久| 不卡一二三区| 视频在线观看一区| 亚洲最大福利网| 免费成人美女在线观看.| 日本在线播放| 91传媒在线免费观看| 久久a级毛片毛片免费观看| 最近中文字幕日韩精品| 超免费在线视频| 国产亚洲免费的视频看| 国产日本亚洲| 欧美一级电影免费在线观看| 国内精品久久久久影院薰衣草| 国产高清不卡| 操91在线视频| 色777狠狠狠综合伊人| 日韩高清三级| 国产精品欧美久久久久一区二区| 手机福利在线| 国产亚洲精品日韩| 日韩.com| 国产伦精品一区二区三区四区视频_ | 在线观看国产v片| 亚洲精品日韩在线| 色综合咪咪久久网| 91传媒免费视频| 在线观看免费成人| 亚洲伊人影院| 99热一区二区三区| 欧美最新大片在线看| 草莓视频一区二区三区| 玛丽玛丽电影原版免费观看1977| 国产三级一区二区| caopeng在线| 国产精品自拍偷拍| 久久久久久久综合日本| 中文字幕免费高清电视剧网站在线观看 | 亚洲福利电影网| 免费视频成人| 日本一区二区三不卡| 亚洲一区中文在线| 亚洲精品a区| 国产精品国三级国产av| 日韩欧美在线综合网| 亚洲香蕉av| 成人羞羞视频免费看看| 美女视频黄免费的亚洲男人天堂| 老司机精品视频导航| av电影在线观看一区二区三区| 国产98色在线| 国产亚洲精品bt天堂精选| 日本韩国欧美| 午夜精品一区二区三区四区 | 尤物国产精品| 337p亚洲精品色噜噜噜| 欧美日韩国产一区二区三区不卡| 国产超级av在线| 亚洲人永久免费| 日韩电影在线观看一区| 午夜激情视频在线| 91九色视频在线观看| 亚洲精选在线视频| 亚洲国产高清在线观看| 各处沟厕大尺度偷拍女厕嘘嘘| 亚洲男人天堂久| 久久99国产精品麻豆| 免费网站免费进入在线| 精品国产区在线| 欧美日韩视频在线第一区| 久久久久久美女精品| 亚洲嫩模一区| 成人性生交大片免费看视频直播| 亚洲高清免费在线| 久久久久久影院| 国产区av在线| 精品国产乱码久久久久久郑州公司| 欧美视频日韩视频| 国产一区白浆| 日本性爱视频在线观看| 亚洲欧美精品在线观看| 亚洲精品一区久久久久久| 国产成人亚洲综合a∨猫咪| 国产精品久久久久久妇女| 男人天堂999| 欧美专区在线播放| 狠狠色狠狠色综合日日五| 亚洲久久成人| 精品众筹模特私拍视频| 国产96在线 | 亚洲| 国内精品在线一区| 精品国产鲁一鲁一区二区张丽| 一区在线播放| 色老头在线一区二区三区| 男人日女人视频网站| 国外成人在线播放| 欧美日韩亚洲系列| 日韩激情在线观看| 高清一区二区中文字幕| 69免费视频| 91精品天堂| 亚洲欧美成人在线| 久久九九国产精品| 99热国内精品| 黑人玩欧美人三根一起进| 无码中文字幕色专区| 国产精品扒开腿爽爽爽视频| 欧美色视频一区| 国产99久久久精品| 黑人操亚洲人| gogo久久| 先锋影音资源综合在线播放av| 99精品国产高清在线观看| 精品无码久久久久久国产| 中文字幕在线一区免费| 影音先锋在线一区| 玖玖精品在线| 日本一卡二卡四卡精品| 国产精品久久成人免费观看| 欧美在线视频网站| 日韩午夜av一区| 国产精品区一区二区三| 午夜精品av| 99久热在线精品视频观看| 噜噜噜在线观看播放视频| 日韩欧美精品免费| 国产精品丝袜久久久久久不卡| 精品久久99ma| 一级做a爱片久久| 蜜臀a∨国产成人精品| 国产精品极品在线观看| 91亚洲天堂| 操操操综合网| 91成人在线观看喷潮教学| 国产三区二区一区久久| 性色av一区二区三区在线观看| 亚洲а∨天堂久久精品9966|