面试题答案
一键面试// 参数装饰器
function logParameter(target: Object, propertyKey: string | symbol, parameterIndex: number) {
return function (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args: any[]) {
console.log(`参数 ${parameterIndex} 的值为:`, args[parameterIndex]);
return originalMethod.apply(this, args);
};
return descriptor;
};
}
// 带有参数装饰器的函数
function greet(@logParameter name: string) {
return `Hello, ${name}!`;
}
console.log(greet('Alice'));
参数装饰器在这个场景中的作用:
- 日志记录:它可以方便地在函数参数被传入时记录参数的值,有助于调试。例如在上述代码中,我们能直观地看到
greet
函数传入的name
参数值。 - 参数验证:通过装饰器可以在函数执行前对参数进行验证。虽然代码中未体现,但可以在装饰器逻辑中添加验证逻辑,若参数不符合要求可以抛出异常等操作。
- 增强函数功能:不改变函数本身业务逻辑的情况下,为函数添加额外功能,如记录参数操作,使得代码的可维护性和可扩展性更好。