上一篇文章介绍了网易邮箱前端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: })();
我们可以看到,这个闭包完成了以下几件事情:
在命名上,我们遵循了一下规则:
这里需要特别说明以下几点:
除了类的定义,闭包不实现 任何其他逻辑。使用闭包能够将很多变量约束在闭包作用域中,并且能够在压缩混淆中效果更好,除此之外,使用闭包定义类,在之后将介绍到的动态加载成为了一件十分容易的事情,稍后会和大家一起分享。