Представьте себе простую рекурсивную функцию, которую мы пытаемся обернуть для ввода и вывода инструмента.Прокси-рекурсивная функция
// A simple recursive function.
const count = n => n && 1 + count(n-1);
// Wrap a function in a proxy to instrument input and output.
function instrument(fn) {
return new Proxy(fn, {
apply(target, thisArg, argumentsList) {
console.log("inputs", ...argumentsList);
const result = target(...argumentsList);
console.log("output", result);
return result;
}
});
}
// Call the instrumented function.
instrument(count)(2);
Однако, это регистрирует только входные и выходные данные на верхнем уровне. Я хочу найти способ, чтобы count
вызывал инструментальную версию, когда она повторяется.
Я считаю, что вам нужно переопределить 'count'. Поскольку JavaScript имеет лексическую область действия, на самом деле вы ничего не можете сделать, чтобы заставить 'count' внутри функции ссылаться на что-то другое (кроме переопределения' count'). Но я был бы счастлив, если бы оказался ошибочным :) –