可维护性
大部分开发人员都花费大量的时间维护他人代码;
可维护性代码的特点:
- 可理解性 -- 能脱离原开发人员的解释接手并理解代码
- 直观性 -- 代码一眼便能看懂
- 可适应性 -- 能适应数据和初始条件的变化
- 可扩展性 -- 考虑未来对核心功能的扩展
- 可调试性 -- 足够的错误信息
代码约定
学习代码规范的途径:github + 各个前端团队规范。
可读性
- 缩进
- 注释
- 函数和方法注释
- 大段代码(功能模块)注释
- 复杂算法注释
- Hack 注释
- 变量和函数命名
- 变量名使用表意 名词(可使用表语修饰)
- 函数名应为 动宾结构
- 变量和函数名字应该让人一看便知其作用(不用担心命名长度)
- 变量类型透明:拒绝
JS的过渡动态性,维持变量的数据类型
松散耦合:应用的某一部分过分依赖于另一部分,是为 过度耦合,如乱麻,难于维护
- 解耦 HTML/JavaScript:易于确定错误来源
- 避免内联 JS 代码
- 避免 HTML 事件处理程序
- 避免
JavaScript内包含大量HTML代码(innerHTML)
- 解耦 CSS/JavaScript
- 使用类型更变取代直接的
style更变 - 杜绝只能在 IE 下使用的
CSS表达式嵌入JavaScript
- 使用类型更变取代直接的
- 解耦 应用逻辑/事件处理程序
- 应用逻辑应该能不依赖事件也可以运行,方便调试
- 事件处理程序处理事件,处理权转交给应用逻辑,易于排错
- 解耦 HTML/JavaScript:易于确定错误来源
编程实践
- 尊重对象所有权(团队开发时)
- 不能修改不属于你的对象
- 不能修改不属于你负责的原型
- 不能修改不属于你的对象的属性和方法
- 不能轻易篡改原生类型的属性和方法
- 只能创建包含所需功能的新对象(副本),并对你的新副本扩展
- 只能创建你的自定义类型,继承需要进行修改的类型,为你的自定义类型添加新属性、方法
- 避免全局变量和全局函数
- 不轻易创建全局变量和函数
- 谨记使用
var声明变量,防止不经意的全局化 - 使用 命名空间(用于放置功能的对象)
- 避免与
null的比较- 使用
instanceof检测比较 typeof检查判断
- 使用
- 尊重对象所有权(团队开发时)
- 使用常量:将数据从应用逻辑分离
- 重复值 -- 在多处都需要用到的值应该抽取为一个常量
- 用户界面字符串 -- 任何用于显示给用户的字符串,都应该抽取出来以方便国际化
- URLs -- 存在变更的可能性
- 任何在将来可能会改变的值