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

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

  网易邮箱页面在 window 只允许定义三种变量——1:全局变量;2:常量;3:类。任何业务逻辑都需要通过类方法或者示例方法实现。前两种变量在之前文章中已经介绍,在此不再累述,接下来详细介绍类定义和使用的规范。

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

01 (function(){
02  
03  //第一步:引入存在的类。引入 support 类
04  
05  var Support = window.Support;
06  
07  
08  //$是网易邮箱基础库“base”的引用稍后会介绍
09  
10  //第二步:定义类。可以认为返回了一个类定义 function (){},并在 window 下定义一个 Image 类
11  
12  var Image = $.createClass ("Image");
13  
14  
15  //可以认为是 jQuery 的 extend 方法
16  
17  
18  //第三步:定义类属性/方法定义
19  
20  $.Object.extend (Image,{
21  
22   _language : null,   //内部属性
23  
24   getSize  : fImageGetSize
25  
26  });
27  
28  //第四步:定义实例属性/方法定义
29  
30  $.Object.extend (Image.prototype,{
31  
32   name  : null,
33  
34   url   : null,
35  
36   ext   : null,
37  
38   width  : 0,
39  
40   height  : 0,
41  
42   setName  : fImageSetName,
43  
44   getName  : fImageGetName,
45  
46   init  : fImageInit
47  
48  });
49  
50  //第五步:方法实现
51  
52  
53  function fImageGetSize (nWidth,nHeight){
54  
55   return nWidth*nHeight;
56  
57  }
58  
59  
60  function fImageSetName (sName){
61  
62   var oImage = this;
63  
64   oImage.name = sName;
65  
66  }
67  
68  
69  function fImageGetName (){
70  
71   var oImage = this;
72  
73   return oImage.name;
74  
75  }
76  
77  
78  function fImageInit (sUrl){
79  
80   var oImage = this;
81  
82   oImage.url = sUrl;
83  
84   oImage.ext = Support.getExt (sUrl);
85  
86   oImage.width = Support.getWidth (sUrl);
87  
88   oImage.height = Support.getHeight (sUrl);
89  
90  }
91  
92  
93 })();

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

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

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

  by dongua

来自: ntesmailfetc.blog.163.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值