网易邮箱前端技术分享之javascript编码规范(二)类规范

上一篇文章介绍了网易邮箱前端javascript编码规范的第一部分,关于变量和函数的编码规范,本篇文章将继续介绍网易邮箱制定的javascript类编码规范。

网易邮箱页面在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实现。

除了类的定义,闭包不实现 任何其他逻辑。使用闭包能够将很多变量约束在闭包作用域中,并且能够在压缩混淆中效果更好,除此之外,使用闭包定义类,在之后将介绍到的动态加载成为了一件十分容易的事情,稍后会和大家一起分享。

转载于:https://www.cnblogs.com/leohxj/archive/2012/05/19/2508792.html

你可能感兴趣的:(网易邮箱前端技术分享之javascript编码规范(二)类规范)