Поведение массивов во вложенных функциях
Решаю задачи вот этой главы учебника javascript.ru. Нужно сделать обертку-шпион вокруг другой функции, которая будет сохранять параметры вызова в массив.
Мое решение не работает с массивом, выбрасывает ошибку TypeError: undefined is not an object (evaluating 'wrapper.base.push'). При этом если я обращаюсь ко wrapper.base как к обычной переменной, например вместо Код:
wrapper.base.push(args);Код:
wrapper.base = args;Вот мой вариант:
function work(a, b) {
return a + b;
}
function spy(func) {
return function wrapper(...args) {
wrapper.base.push(args);
return func.apply(this, args);
}
wrapper.base = [];
}
work = spy(work);
А решение с сайта работает, привожу его ниже. В этом решении работа происходит с массивом, и разница состоит в том, что у меня функция wrapper объявлена в виде Код:
return function wrapper(...args)
function spy(func) {
function wrapper(...args) {
// мы используем ...args вместо arguments для хранения "реального" массива в wrapper.calls
wrapper.calls.push(args);
return func.apply(this, args);
}
wrapper.calls = [];
return wrapper;
}
Мой вопрос: Почему мой вариант решения работает с обычной переменной, но выбрасывает ошибку при попытке работы с массивом. Имеет ли к этому отношение то, как я объявляю функцию wrapper, и если да, то какая между этим всем связь? |
Цитата:
|
Цитата:
Спасибо вам за ответ! |
| Часовой пояс GMT +3, время: 20:45. |