update func

This commit is contained in:
2025-03-05 12:33:59 +03:00
parent e60ec041ae
commit 31caa0e6de
15 changed files with 539 additions and 1 deletions

View File

@@ -0,0 +1,25 @@
---
sidebar_position: 9
---
# Декораторы и переадресация вызова, call/apply
Источник [https://learn.javascript.ru/call-apply-decorators](https://learn.javascript.ru/call-apply-decorators)
Декоратор это обёртка вокруг функции, которая изменяет поведение последней. Основная работа по-прежнему выполняется функцией.
Обычно безопасно заменить функцию или метод декорированным, за исключением одной мелочи. Если исходная функция предоставляет свойства, такие как `func.calledCount` или типа того, то декорированная функция их не предоставит. Потому что это обёртка. Так что нужно быть осторожным в их использовании. Некоторые декораторы предоставляют свои собственные свойства.
Декораторы можно рассматривать как «дополнительные возможности» или «аспекты», которые можно добавить в функцию. Мы можем добавить один или несколько декораторов. И всё это без изменения кода оригинальной функции!
Для реализации `cachingDecorator` мы используем методы:
- `func.call(context, arg1, arg2…)` вызывает `func` с данным контекстом и аргументами.
- `func.apply(context, args)` вызывает `func`, передавая `context` как `this` и псевдомассив `args` как список аргументов.
В основном переадресация вызова выполняется с помощью apply:
```js
let wrapper = function(original, arguments) {
return original.apply(this, arguments);
};
```
Весьма распространено заимствовать методы массива и применять их к arguments. В качестве альтернативы можно использовать объект с остаточными параметрами ...args, который является реальным массивом.