300просмотров
6 марта 2025 г.
statsScore: 330
1️⃣ Первый вариант: Log как обычная функция function Log( target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<(...args: any[]) => any>
): TypedPropertyDescriptor<(...args: any[]) => any> | void { descriptor.value = () => { console.log('Жопа'); }
} 🔹 Это функция-декоратор, которая сразу применяется к методу класса.
🔹 Вызывается без скобок @Log, так как это просто функция.
🔹 Перезаписывает метод, заменяя его на () => console.log('Жопа'). Использование class Example { @Log doSomething() { console.log('Оригинальный метод'); }
} const e = new Example();
e.doSomething(); // Выведет "Жопа" 2️⃣ Второй вариант: Log как фабрика декораторов function Log() { return ( target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<(...args: any[]) => any> ): TypedPropertyDescriptor<(...args: any[]) => any> | void => { descriptor.value = () => { console.log('Жопа'); } }
} 🔹 Фабрика декораторов — это функция, которая возвращает сам декоратор.
🔹 Требует вызова с круглыми скобками @Log(), так как это функция, которая возвращает другую функцию.
🔹 Позволяет передавать параметры в декоратор (например, логгирование разного уровня). 👉 Использование: class Example { @Log() // Требуются скобки doSomething() { console.log('Оригинальный метод'); }
} const e = new Example();
e.doSomething(); // Выведет "Жопа"