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

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
还木有评论哦,快来抢沙发吧~