apply() может работать не только с настоящими
массивами, но и с объектами, подобными массивам. В частности, вы можете вызвать функцию с теми же аргументами, что и текущую функцию, передав массив
с аргументами непосредственно методу apply(). Этот прием демонстрируется ниже:
function trace(o, m) {
var original = o[m]; // сохранить оригинальный метод в замыкании
o[m] = function () { // определить новый метод
console.log(new Date(), "Entering: ", m); // записать сообщение
var result = original.apply(this, arguments); // вызвать оригинал
console.log(new Date(), "Exiting: ", m); // записать сообщение
return result; // вернуть результат
};
};
Эта функция trace() принимает объект и имя метода. Она замещает указанный
метод новым методом, который «обертывает» оригинальный метод дополнительной функциональностью. Такой прием динамического изменения существующих методов иногда называется «обезьяньей заплатой» («monkey-patching»).
НЕ понятно вообще что эта функция вообще должна возвращать и что показывать?
куда и чего она оборачивает?
консоль либо ничего не показывает, либо если вызвать лог - ошибку
по факту, сейчас возвращается результат работы original, оригинального метода, ибо кроме console.log в функции обертке больше ничего нет. так что, ничего она не дополняет.. на вскидку это что-то вроде кривой реализации middleware 🤷🏼♀
благодарю) мне просто чтобы понять на практике где и как это используется
а ничего не показывает при вызове trace потому, что она сама по себе ничего не возвращает, функция обьявилась, в обьекте изменилась, но запуска ее не было.. следовательно, либо ее использовать через обьект, тогда после запуска будет утерян оригинал, останется только измененная, либо дописывать здесь, типо схоронил оригинал, обвесил, попользовался, вернул оригинал.. ля.. и правда, манки патчинг, фу
Обсуждают сегодня