Ответ
Да, декораторы могут принимать аргументы. Есть два основных способа:
- Декоратор с параметрами - оборачивается в ещё одну функцию:
function decorator(param) {
return function(target) {
target.prototype.param = param;
}
}
@decorator('value')
class MyClass {}
- Декоратор метода с аргументами - может модифицировать поведение метода:
function logDecorator(target, name, descriptor) {
const original = descriptor.value;
descriptor.value = function(...args) {
console.log('Arguments:', args);
return original.apply(this, args);
}
return descriptor;
}
class Example {
@logDecorator
method(a, b) { return a + b; }
}
Декораторы получают доступ к:
- Целевому объекту (класс/метод/свойство)
- Его имени
- Дескриптору (для методов)
- Могут возвращать новый дескриптор