Поведение массивов во вложенных функциях
Решаю задачи вот этой главы учебника 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:29. |