You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Angular中实现带参数的方法装饰器并覆写结果

实现带参数的方法装饰器(覆写方法结果)

要实现这个能传入参数、覆写方法返回结果的装饰器,核心是保留原方法的逻辑,同时在其基础上用传入的参数处理返回值。具体实现如下:

完整代码示例

export class Calculation{
    @multiply(2)
    addOne(number: number) {
        return number + 1;
    }        
}

function multiply(param1: number) {
    return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
        // 保存原方法的引用,避免被覆盖后丢失
        const originalMethod = descriptor.value;
        
        // 重写方法的执行逻辑
        descriptor.value = function(...args: any[]) {
            // 调用原方法,获取原始计算结果
            const originalResult = originalMethod.apply(this, args);
            // 用装饰器传入的参数处理结果并返回
            return originalResult * param1;
        };
        
        return descriptor;
    };
}

测试验证

调用以下代码会输出预期的6:

console.log(new Calculation().addOne(2));

关键细节说明

  • 用originalMethod.apply(this, args)调用原方法,保证原方法的this上下文与原本一致,避免指向错误
  • ...args接收原方法的所有参数,让装饰器可以适配任意参数数量的方法
  • 装饰器的参数param1会被内层函数通过闭包捕获,因此在重写的方法中可以直接使用

内容的提问来源于stack exchange,提问作者subhash .net cool

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 14:18:32