菜单

类、模块和迭代器

相关源文件

目的与范围

本文档详细介绍了 Airbnb JavaScript 风格指南关于使用 ES6+ 类、模块和迭代器的建议。这些现代 JavaScript 功能提供了结构化的方式来组织代码、在文件之间共享功能以及迭代集合。本指南解释了在代码库中实现这些功能时首选的模式和实践。

概述

来源: README.md1109-1591

类与构造函数

ES6+ 中的类为创建对象和处理继承提供了更简洁的语法。Airbnb 风格指南推荐使用一致的模式,以使类声明更具可读性和可维护性。

类语法建议

来源: README.md1109-1305

类声明最佳实践

  1. 使用类语法,而不是直接操作原型

    这使代码更具可读性,更易于理解

  2. 使用 extends 进行继承

    内置的继承机制保留了 instanceof 操作符

  3. 方法可以返回 this 以实现方法链式调用

  4. 避免不必要的构造函数

    如果未指定构造函数,类将具有默认构造函数

  5. 类方法应使用 this 或成为静态方法

来源: README.md1111-1304

模块

ES6 模块提供了一种组织和共享 JavaScript 文件之间代码的标准方法。Airbnb 风格指南对模块使用有具体建议,以确保一致性和可维护性。

模块导入/导出模式

来源: README.md1307-1477

模块导入/导出最佳实践

  1. 始终使用 ES 模块(import/export),而不是非标准模块系统

  2. 避免通配符导入

  3. 不要直接从导入中导出

  4. 只在一个地方从一个路径导入

  5. 不要导出可变绑定

  6. 将所有导入放在文件顶部

  7. 在导入中不要包含 JavaScript 文件名扩展名

来源: README.md1309-1476

模块组织结构

下表显示了项目中模块的推荐组织方式

组织方面建议
导入顺序所有导入都放在文件顶部
导入样式尽可能使用具名导入,单个导出时使用默认导出
文件结构尽可能每个文件只有一个默认导出
命名文件名应与默认导出匹配
扩展忽略导入语句中的文件扩展名
格式化多行导入遵循与数组/对象相同的样式

来源: README.md1307-1477

迭代器和生成器

JavaScript 提供了内置的迭代机制,但 Airbnb 风格指南推荐使用特定的迭代方法,偏好函数式编程模式而不是传统迭代器。

迭代方法比较

来源: README.md1479-1591

迭代器最佳实践

  1. 优先使用高阶函数,而非循环

  2. 使用数组方法进行数组转换

  3. 使用对象方法进行对象迭代

  4. 暂时避免使用生成器

    由于转译问题,风格指南建议避免使用生成器。如果必须使用,请注意适当的间距

来源: README.md1481-1589

与风格指南其他组件的集成

类、模块和迭代器与风格指南的其他组件协同工作,以创建可维护的代码。它们与其他风格指南方面的关系如下:

来源: README.md943-1060 README.md1307-1477 README.md1479-1591

常见陷阱和最佳实践

功能常见陷阱最佳实践
直接操作原型使用类语法
不必要的构造函数如果只是调用 super(),则省略构造函数
重复的类成员确保方法名称唯一
模块通配符导入使用具名导入或默认导入
来自同一路径的多个导入合并导入
可变导出仅导出常量
迭代器使用 for-in/for-of 循环使用数组高阶函数
复杂的命令式循环使用函数式方法 (map, reduce 等)
间距不当的生成器如果使用生成器,请遵守间距规则

来源: README.md1109-1591

ESLint 配置

Airbnb 提供了 ESLint 规则来强制执行这些最佳实践

功能ESLint 规则
no-useless-constructorno-dupe-class-membersclass-methods-use-this
模块import/firstimport/no-mutable-exportsimport/prefer-default-exportimport/extensionsimport/no-webpack-loader-syntax
迭代器no-iteratorno-restricted-syntaxgenerator-star-spacing

来源: README.md1221-1273 README.md1359-1462 README.md1482-1531

总结

在使用 Airbnb 风格指南的 JavaScript 类、模块和迭代器时

  1. :使用 ES6 类语法,利用 extends 进行继承,通过返回 this 实现方法链式调用,并恰当地使用静态方法。

  2. 模块:仅使用 ES6 模块语法,将导入放在文件顶部,偏好具名导入,并遵循一致的导出模式。

  3. 迭代器:偏好使用高阶函数(map、filter、reduce)而不是循环和迭代器,如果必须使用生成器,请遵循特定的指南。

遵循这些实践可确保 JavaScript 应用程序的代码一致、可维护且易于阅读。