// 前置日志装饰器
function beforeMethod(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function(...args: any[]) {
console.log('before method');
return originalMethod.apply(this, args);
};
return descriptor;
}
// 后置日志装饰器
function afterMethod(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function(...args: any[]) {
const result = originalMethod.apply(this, args);
console.log('after method');
return result;
};
return descriptor;
}
class MyClass {
@beforeMethod
@afterMethod
myMethod() {
console.log('method is running');
}
}
const myClass = new MyClass();
myClass.myMethod();