Назад к задачам
Junior — Senior
7

Создание обёртки‑шпиона для любой функции

Компании, где спрашивали:

ЯндексЯндекс
Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Реализуйте функцию spy, которая принимает другую функцию и возвращает её обёртку, имитирующую поведение оригинала. Помимо выполнения, обёртка должна сохранять информацию о каждом вызове: количество вызовов в data.calls, массив переданных аргументов в data.args и полученные результаты в data.results. Пример использования:

 function _sum(a, b) {
    return a + b
}

function spy(f) {
    // ТУТ ПИШЕМ КОД
}

const sum = spy(_sum)

console.log(sum(2, 2)) // 4  
console.log(sum(21, 21)) // 42  
/* КОЛИЧЕСТВО ВЫЗОВОВ ФУНКЦИИ _sum */  
console.log(sum.data.calls) // 2  
/* ВРЕМЕНИ С КОТОРЫМИ была вызвана функция _sum, с сохранением порядка вызовов */  
console.log(sum.data.args) // [(2, 2], [21, 21])  
/* результаты, которые вернула функция _sum, с сохранением порядка вызовов */  
console.log(sum.data.results) // [4, 42]