JavaScript 面试题
目录

JavaScript 中如何实现装饰器模式?

· 约 3 分钟读完 · 第 491 / 507 章

推荐答案

在 JavaScript 中,装饰器模式可以通过高阶函数或 ES6 的装饰器语法来实现。以下是两种实现方式:

1. 使用高阶函数实现装饰器模式

2. 使用 ES6 装饰器语法实现装饰器模式

本题详细解读

1. 高阶函数实现装饰器模式

在高阶函数的实现中,withLogging 是一个装饰器函数,它接受一个函数 fn 作为参数,并返回一个新的函数。这个新函数在调用原始函数之前和之后分别打印日志信息。通过这种方式,我们可以在不修改原始函数的情况下,为其添加额外的行为。

2. ES6 装饰器语法实现装饰器模式

ES6 装饰器语法允许我们使用 @ 符号来修饰类的方法或属性。loggingDecorator 是一个装饰器函数,它接受三个参数:target(类的原型对象)、name(方法名)和 descriptor(属性描述符)。在装饰器函数内部,我们修改了原始方法的 value,使其在调用前后打印日志信息。

3. 装饰器模式的应用场景

装饰器模式通常用于以下场景:

  • 日志记录:在函数或方法调用前后添加日志记录。
  • 权限检查:在函数或方法调用前检查用户权限。
  • 缓存:在函数或方法调用前检查缓存,避免重复计算。
  • 性能监控:在函数或方法调用前后记录执行时间。

通过装饰器模式,我们可以将核心逻辑与附加功能分离,使代码更加模块化和可维护。