update func
This commit is contained in:
25
docs/javascript/04-functions/09-decorators-call-apply.md
Normal file
25
docs/javascript/04-functions/09-decorators-call-apply.md
Normal 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, который является реальным массивом.
|
||||
|
||||
Reference in New Issue
Block a user