上一篇文章介绍了网易邮箱前端 javascript 编码规范的第一部分,关于变量和函数的编码规范,本篇文章将继续介绍网易邮箱制定的 javascript 类编码规范。
网易邮箱页面在 window 只允许定义三种变量——1:全局变量;2:常量;3:类。任何业务逻辑都需要通过类方法或者示例方法实现。前两种变量在之前文章中已经介绍,在此不再累述,接下来详细介绍类定义和使用的规范。
定义类是通过一个闭包完成的:
05 | var Support = window.Support; |
12 | var Image = $.createClass ( "Image" ); |
20 | $.Object.extend (Image,{ |
24 | getSize : fImageGetSize |
30 | $.Object.extend (Image.prototype,{ |
42 | setName : fImageSetName, |
44 | getName : fImageGetName, |
53 | function fImageGetSize (nWidth,nHeight){ |
55 | return nWidth*nHeight; |
60 | function fImageSetName (sName){ |
69 | function fImageGetName (){ |
78 | function fImageInit (sUrl){ |
84 | oImage.ext = Support.getExt (sUrl); |
86 | oImage.width = Support.getWidth (sUrl); |
88 | oImage.height = Support.getHeight (sUrl); |
我们可以看到,这个闭包完成了以下几件事情:
- 引入这个类需要用到的其他类。
- 定义这个类。
- 定义类的属性和方法。
- 定义类的实例属性和方法。
- 类和实例方法的实现。
在命名上,我们遵循了一下规则:
- 类名首个字母必需大写,例如 Image,Support 等。
- 属性名需要是有意义的名词,首字母小写,例如 oImage.width。
- 方法名需要是有意义的动词[+名词],首字母小写,例如 Support.getWidth
- 如果不希望被其他方法调用,需要在属性或者方法名前面加“_”,例如 oImage._language
- 如果不希望被子类调用,需要在属性或者方法名前加“_”,例如 oImage.__fire ()
这里需要特别说明以下几点:
- 方法的定义不是通过匿名函数来定义,而是集中在类定义的下面来实现。这样的好处是能在最开始将类的属性方法定义都罗列出来,便于通过源码查看到对应属性和方法。
- 在类/实例方法中,使用局部变量代替 this。this 不是一个好的玩意儿,一不小心就会被 this 搞晕。使用局部变量能够尽量避免这样的问题,也能够在压缩混淆的时候效果更好。
- 在实际开发过程中,每个类定义都单独一个 js 实现。
除了类的定义,闭包不实现任何其他逻辑。使用闭包能够将很多变量约束在闭包作用域中,并且能够在压缩混淆中效果更好,除此之外,使用闭包定义类,在之后将介绍到的动态加载成为了一件十分容易的事情,稍后会和大家一起分享。
by dongua
来自: ntesmailfetc.blog.163.com