本文档详细介绍了 Airbnb JavaScript 风格指南关于使用 ES6+ 类、模块和迭代器的建议。这些现代 JavaScript 功能提供了结构化的方式来组织代码、在文件之间共享功能以及迭代集合。本指南解释了在代码库中实现这些功能时首选的模式和实践。
ES6+ 中的类为创建对象和处理继承提供了更简洁的语法。Airbnb 风格指南推荐使用一致的模式,以使类声明更具可读性和可维护性。
使用类语法,而不是直接操作原型
这使代码更具可读性,更易于理解
使用 extends 进行继承
内置的继承机制保留了 instanceof 操作符
方法可以返回 this 以实现方法链式调用
避免不必要的构造函数
如果未指定构造函数,类将具有默认构造函数
类方法应使用 this 或成为静态方法
ES6 模块提供了一种组织和共享 JavaScript 文件之间代码的标准方法。Airbnb 风格指南对模块使用有具体建议,以确保一致性和可维护性。
始终使用 ES 模块(import/export),而不是非标准模块系统
避免通配符导入
不要直接从导入中导出
只在一个地方从一个路径导入
不要导出可变绑定
将所有导入放在文件顶部
在导入中不要包含 JavaScript 文件名扩展名
下表显示了项目中模块的推荐组织方式
| 组织方面 | 建议 |
|---|---|
| 导入顺序 | 所有导入都放在文件顶部 |
| 导入样式 | 尽可能使用具名导入,单个导出时使用默认导出 |
| 文件结构 | 尽可能每个文件只有一个默认导出 |
| 命名 | 文件名应与默认导出匹配 |
| 扩展 | 忽略导入语句中的文件扩展名 |
| 格式化 | 多行导入遵循与数组/对象相同的样式 |
JavaScript 提供了内置的迭代机制,但 Airbnb 风格指南推荐使用特定的迭代方法,偏好函数式编程模式而不是传统迭代器。
优先使用高阶函数,而非循环
使用数组方法进行数组转换
使用对象方法进行对象迭代
暂时避免使用生成器
由于转译问题,风格指南建议避免使用生成器。如果必须使用,请注意适当的间距
类、模块和迭代器与风格指南的其他组件协同工作,以创建可维护的代码。它们与其他风格指南方面的关系如下:
来源: README.md943-1060 README.md1307-1477 README.md1479-1591
| 功能 | 常见陷阱 | 最佳实践 |
|---|---|---|
| 类 | 直接操作原型 | 使用类语法 |
| 不必要的构造函数 | 如果只是调用 super(),则省略构造函数 | |
| 重复的类成员 | 确保方法名称唯一 | |
| 模块 | 通配符导入 | 使用具名导入或默认导入 |
| 来自同一路径的多个导入 | 合并导入 | |
| 可变导出 | 仅导出常量 | |
| 迭代器 | 使用 for-in/for-of 循环 | 使用数组高阶函数 |
| 复杂的命令式循环 | 使用函数式方法 (map, reduce 等) | |
| 间距不当的生成器 | 如果使用生成器,请遵守间距规则 |
Airbnb 提供了 ESLint 规则来强制执行这些最佳实践
| 功能 | ESLint 规则 |
|---|---|
| 类 | no-useless-constructor、no-dupe-class-members、class-methods-use-this |
| 模块 | import/first、import/no-mutable-exports、import/prefer-default-export、import/extensions、import/no-webpack-loader-syntax |
| 迭代器 | no-iterator、no-restricted-syntax、generator-star-spacing |
来源: README.md1221-1273 README.md1359-1462 README.md1482-1531
在使用 Airbnb 风格指南的 JavaScript 类、模块和迭代器时
类:使用 ES6 类语法,利用 extends 进行继承,通过返回 this 实现方法链式调用,并恰当地使用静态方法。
模块:仅使用 ES6 模块语法,将导入放在文件顶部,偏好具名导入,并遵循一致的导出模式。
迭代器:偏好使用高阶函数(map、filter、reduce)而不是循环和迭代器,如果必须使用生成器,请遵循特定的指南。
遵循这些实践可确保 JavaScript 应用程序的代码一致、可维护且易于阅读。