hand
_1_11_209
4
返回栏目
0k
2k
1k
2k
1k
1k
1k
2k
2k
2k
1k
2k
1k
2k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
2k
1k
2k
1k
1k
1k
1k
1k
1k
1k
2k
2k
1k
1k
1k
2k
1k
1k
2k
2k
1k
1k
1k
2k
1k
1k
2k
2k
1k
2k
1k
1k
2k
2k
2k
3k
3k
2k
3k
2k
3k
3k
3k
1k
2k
3k
2k
2k
3k
3k
2k
2k
6k
3k
2k
2k
5k
3k
4k
3k
3k
2k
4k
3k
3k
2k
3k
3k
1k
4k
4k
4k
2k
5k
3k
2k
3k
4k
3k
3k
4k
2k
3k
3k
4k
2k
2k
3k
4k
3k
3k
2k
5k
2k
3k
3k
3k
3k
2k
3k
3k
3k
2k
2k
2k
2k
3k
2k
2k
2k
3k
2k
2k
2k
2k
2k
2k
0.1k
0.2k
3k
2k
3k
2k
0.1k
2k
2k
4k
2k
2k
1k
2k
2k
3k
3k
3k
3k
2k
2k
3k
3k
3k
4k
3k
3k
4k
3k
2k
2k
3k
3k
3k
3k
3k
3k
2k
3k
3k
4k
4k
3k
3k
2k
2k
3k
2k
2k
1k
2k
3k
1k
2k
2k
2k
2k
2k
2k
2k
2k
2k
4k
2k
3k
2k
1k
2k
2k
2k
2k
2k
3k
2k
3k
1k
2k
2k
2k
0k
2k
2k
2k
2k
2k
2k
2k
3k
2k
2k
1k
1k
3k
2k
3k
1k
2k
1k
2k
2k
2k
2k
3k
1k
3k
2k
2k
2k
2k
2k
2k
1k
2k
2k
4k
3k
3k
2k
2k
2k
2k
2k
2k
4k
3k
3k
3k
2k
2k
2k
2k
2k
2k
3k
4k
返回前端 - Javascript栏目
作者:
贺及楼
成为作者
更新日期:2025-02-21 20:49:34
在前端开发中,JavaScript 不断发展,引入了许多强大的特性来提升代码的可维护性和复用性。装饰器(Decorator)就是其中之一,它是一种特殊的声明,能够被附加到类声明、方法、属性或参数上,用来修改类的行为。本文将聚焦于方法装饰器的实现,深入探讨其原理、应用场景以及具体的代码实现。
方法装饰器是一种特殊的函数,它可以用来装饰类的方法。方法装饰器会在类的定义时被调用,并且可以修改被装饰方法的行为。方法装饰器接收三个参数:
value
、writable
、enumerable
和 configurable
等。
function methodDecorator(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
// 可以在这里修改 descriptor 的属性
return descriptor;
}
class MyClass {
@methodDecorator
myMethod() {
console.log('This is my method.');
}
}
在某些情况下,我们希望记录方法的调用信息,例如方法的开始时间、结束时间以及执行结果等。可以使用方法装饰器来实现日志记录功能。
function logMethod(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args: any[]) {
console.log(`Calling method ${propertyKey} with arguments: ${JSON.stringify(args)}`);
const result = originalMethod.apply(this, args);
console.log(`Method ${propertyKey} returned: ${JSON.stringify(result)}`);
return result;
};
return descriptor;
}
class Calculator {
@logMethod
add(a: number, b: number) {
return a + b;
}
}
const calculator = new Calculator();
const result = calculator.add(2, 3);
在一些应用中,某些方法可能需要特定的权限才能调用。可以使用方法装饰器来实现权限验证功能。
function requirePermission(permission: string) {
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args: any[]) {
// 模拟权限验证
const hasPermission = checkUserPermission(permission);
if (hasPermission) {
return originalMethod.apply(this, args);
} else {
console.log(`You don't have permission to call ${propertyKey}`);
return null;
}
};
return descriptor;
};
}
function checkUserPermission(permission: string) {
// 这里可以实现具体的权限验证逻辑
return false;
}
class AdminPanel {
@requirePermission('admin')
deleteUser(userId: number) {
console.log(`Deleting user with ID ${userId}`);
}
}
const adminPanel = new AdminPanel();
adminPanel.deleteUser(1);
应用场景 | 描述 | 示例代码 |
---|---|---|
日志记录 | 记录方法的调用信息,如开始时间、结束时间和执行结果 | logMethod 装饰器 |
权限验证 | 验证用户是否具有调用方法的权限 | requirePermission 装饰器 |
方法装饰器是 JavaScript 中一个非常强大的特性,它可以帮助我们实现代码的复用和增强代码的可维护性。通过合理使用方法装饰器,我们可以将一些通用的逻辑从业务代码中分离出来,使代码更加清晰和易于管理。在实际开发中,我们可以根据具体的需求,灵活运用方法装饰器来解决各种问题。
前端 - Javascript
整章节共299节
快分享给你的小伙伴吧 ~