首页 > 代码库 > JavaScript 编码规范

JavaScript 编码规范

变量命名规范:

  基本规范:变量命名都以类型前缀+有意义的单词组成,单词首字母都需要大写。例如:sUserName, nCount.

 前缀规范:

  s :表示字符串。   sName, sHtml

  n : 表示数字。 nPage, nTotal

  b :表示逻辑。 bChecked

  a :表示数组。 aList

  r : 表示正则表达式。 rDomain

  f : 表示函数。 rGetHtml

  o :表示以上未涉及到的其他对象:  oButton

全局变量使用g作为前缀 : gUserName

常量使用全部字母大写: COPYRIGHT , PI

 

函数命名规范:

  统一使用动词或者动词[+名词]形式,如:fGetVersion(), fSubmitForm(), fInit();

涉及返回逻辑值得函数可以使用 is,has等表示逻辑词语代替动词

如果有内部函数,使用__f+动词[+名词]形式,内部函数必须在函数最后定义

 

对象方法实现:

  对象方法命名使用f+对象类名+动词[+名词]形式;如 :fAddressGetEmail

 

事件响应函数:

  某事件响应函数命名方式为触发事件对象名+事件名或模块名+触发事件对象名+事件名,如:fDivClick(),fAddressSubmitButtonClick();

 

 

 

定义类是通过一个闭包完成的:

(function(){ 
//第一步:引入存在的类。引入support类 
var Support = window.Support; 

//$是网易邮箱基础库“base”的引用稍后会介绍 
//第二步:定义类。可以认为返回了一个类定义 function(){},并在window下定义一个Image类 
var Image = $.createClass("Image"); 

//可以认为是jQuery的extend方法 

//第三步:定义类属性/方法定义 
$.Object.extend(Image,{ 
_language : null, //内部属性 
getSize : fImageGetSize 
}); 
//第四步:定义实例属性/方法定义 
$.Object.extend(Image.prototype,{ 
name : null, 
url : null, 
ext : null, 
width : 0, 
height : 0, 
setName : fImageSetName, 
getName : fImageGetName, 
init : fImageInit 
}); 
//第五步:方法实现 

function fImageGetSize(nWidth,nHeight){ 
return nWidth*nHeight; 


function fImageSetName(sName){ 
var oImage = this; 
oImage.name = sName; 


function fImageGetName(){ 
var oImage = this; 
return oImage.name; 


function fImageInit(sUrl){ 
var oImage = this; 
oImage.url = sUrl; 
oImage.ext = Support.getExt(sUrl); 
oImage.width = Support.getWidth(sUrl); 
oImage.height = Support.getHeight(sUrl); 


})();



我们可以看到,这个闭包完成了以下几件事情:

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实现。

除了类的定义,闭包不实现 任何其他逻辑。使用闭包能够将很多变量约束在闭包作用域中,并且能够在压缩混淆中效果更好.

  

JavaScript 编码规范