Javascript如何实现装饰器_如何动态扩展功能?

admin 百科 13
JavaScript装饰器是Stage 3提案,作为语法糖在类定义阶段动态增强类、方法等;支持类、方法、属性装饰器,常用于日志、错误重试、权限控制等横切关注点。

Javascript如何实现装饰器_如何动态扩展功能?-第1张图片-佛山资讯网

JavaScript 中的装饰器(Decorator)目前仍是 Stage 3 提案,尚未正式进入标准,但可通过 Babel(配合 @babel/plugin-proposal-decorators)或 TypeScript 启用。它本质是一种语法糖,用于在类、方法、访问器或属性声明时,以声明式方式“包裹”或“增强”目标行为——也就是动态扩展功能的核心机制。

装饰器的基本形态:函数接收目标信息

装饰器必须是函数,它会在定义时被调用,并接收不同参数,取决于装饰位置:

  • 类装饰器:接收构造函数(target
  • 方法/访问器装饰器:接收类原型(target)、方法名(propertyKey)、属性描述符(descriptor
  • 属性装饰器(仅 TS 或 Babel 模拟):接收类构造函数和属性名(不直接操作 descriptor,需配合 Object.defineProperty 或元数据实现)

关键点:装饰器执行时机是**类定义阶段**(非实例化时),因此适合做静态增强、元数据收集、方法重写等。

用方法装饰器实现日志与性能监控

这是最典型的动态扩展场景:不修改原方法逻辑,只在外层添加横切关注点。

立即学习“Java免费学习笔记(深入)”;

function log(target, propertyKey, descriptor) {
  const original = descriptor.value;
  descriptor.value = function(...args) {
    console.log(`[LOG] 调用 ${propertyKey},参数:`, args);
    const start = performance.now();
    const result = original.apply(this, args);
    const end = performance.now();
    console.log(`[PERF] ${propertyKey} 执行耗时:${end - start}ms`);
    return result;
  };
}

登录后复制

使用方式:

标签: javascript java typescript app red

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~