JavaScript Reflect.apply() — викликати функцію з масивом аргументів
Метод Reflect.apply() викликає функцію із заданим this і масивом аргументів.
Загальний опис
Робить те саме, що func.apply(), але надійніше. Річ у тім, що apply — це властивість самої функції, і її можна перевизначити чи втратити (наприклад, на об'єкті з null замість прототипу). Reflect.apply() не залежить від об'єкта, який викликає.
У парі з Proxy реалізує пастку apply — так функцію можна обгорнути логуванням чи вимірюванням часу, лишивши її поведінку незмінною.
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| apply | 49+ | 42+ | 10+ | 36+ | 12+ | - |
| Переглядач | ||||
|---|---|---|---|---|
| apply | 49+ | yes | yes | 10+ |
Приклади
+ запропонувати свій приклад у пісочниці
Обгортка, що міряє час виконання будь-якої функції.
console.log(Reflect.apply(Math.max, null, [1, 5, 3])); // 5
// обгортка через пастку apply
function timed(fn) {
return new Proxy(fn, {
apply(target, thisArg, args) {
const start = performance.now();
const result = Reflect.apply(target, thisArg, args);
console.log(target.name, 'зайняла', performance.now() - start, 'мс');
return result;
},
});
}
const slowSum = timed(function sum(a, b) { return a + b; });
slowSum(1, 2);
Коментарі
Коментарів ще немає — будьте першим!