Node.js 中的装饰器

2025年3月5日 | 阅读 4 分钟

引言

装饰器 是一种在不改变其原始实现方式的情况下,改进或更改类及其成员(方法、属性或访问器)的技术。这在 Node.js 的上下文中尤其有用。在 ECMAScript 的提案中,装饰器主要与 TypeScript 一起使用。然而,一些库和实验性功能也允许它们与 JavaScript 一起使用。

装饰器可以以可重用且清晰的方式实现面向对象编程的特性,例如横切关注点。它们经常用于为各种框架和库中的类或方法提供声明性功能,从而提高可读性和可维护性。

什么是装饰器?

装饰器是一个为现有方法提供额外功能的函数。它可以在不更改对象原始代码的情况下,扩展对象的功能,同时改变其行为。

装饰器是提高代码可读性、可维护性和可重用性的绝佳方式。它们是 JavaScript 中用于修改类、方法、属性甚至参数的函数。它们提供了一种在不更改原始代码的情况下,为代码不同部分添加信息或行为的方法。

它通常与类一起使用,装饰器以 @ 符号开头。

如何在 JavaScript 中使用装饰器?

要使用我们代码中的装饰器,我们必须依赖一个名为 Babel 的转译器,因为它们还不是 JavaScript 的主流功能。Babel 的最新功能使我们能够编写 JavaScript,然后它会将我们的代码编译成浏览器兼容的版本。

语法

它具有以下语法:

输出

Decorators in Node.js
  • 装饰器组合
    装饰器提供了强大的组合和嵌套特性。这意味着我们可以将多个装饰器应用于同一段代码,并且它们将按照特定的顺序执行。它支持开发复杂、模块化的应用程序。

示例

在这个用例中,多个装饰器应用于相同的代码。让我们来分析一下。假设我们有一个 Web 应用程序,并且我们想根据用户的授权和身份验证级别来限制对特定路由的访问。我们可以通过以下方式创建装饰器来实现这一点:

输出

Decorators in Node.js
  • 参数装饰器
    我们可以使用参数装饰器来修改方法的参数。虽然它们不如其他类型的装饰器常见,但在特定场景下可能很有用,例如函数参数转换或验证。

示例

下面是确保函数参数在给定范围内的一个参数装饰器的示例:

输出

Decorators in Node.js

    说明

    代码定义了一个 valParam 装饰器,该装饰器可确保方法的参数在给定范围内。它会检查参数是否在 0 到 10 之间,并装饰 Calc 类中的 mult 方法。由于 12 超出范围,因此当使用 5 和 12 调用 mult 时,会引发错误。

    使用装饰器的优缺点

    优点

    • 装饰器可以让我们在不更改代码的情况下扩展对象的功能。这对于添加错误处理、日志记录或安全检查等功能而不改变对象的主要操作非常有用。
    • 由于可以在不影响对象主要功能的情况下添加或删除行为,因此装饰器可以帮助我们的代码变得更加模块化,并且更易于维护。
    • 由于装饰器易于构建,我们可以将多个装饰器应用于一个对象以获得所需行为。

    使用装饰器有一些缺点。

    • 因为装饰器提供了另一层抽象,它们可能会增加我们代码的复杂性。
    • 当我们在同一个对象上使用多个装饰器时,装饰器可能会使我们的代码更难阅读。
    • 由于它们是 JavaScript 相对较新的添加项,因此装饰器并非在所有场景下都得到支持。
    • 总的来说,装饰器是为我们的代码添加模块化和适应性强的新行为的有用工具。在使用装饰器编写代码时,权衡可读性和复杂性之间的潜在折衷至关重要。