Функции JavaScript могут быть перехвачены; перехват — это метод динамического изменения процесса выполнения функции или возврата результатов. JavaScript, как динамический язык, также может выполнять операции перехвата, которые обычно используются для прослушивания, вывода вывода и т. д. параметры или переменные и другие операции.
Операционная среда этого руководства: система Windows 10, версия JavaScript 1.8.5, компьютер Dell G3.
Может.
Хук — это метод, который динамически изменяет процесс выполнения или возвращает результаты функции и очень широко используется в практических приложениях. Будучи динамическим языком, Javascript также может выполнять операции с перехватчиками. С развитием языка Javascript появляется все больше и больше методов-хуков.
Буквальный перевод слова «hook» означает «крючок». В области обратного проектирования он обычно используется для прослушивания, вывода вывода, замены и других операций для определенных параметров и переменных.
Примеры следующие:
Пример кода
функция add(a,b){return a + b}код ловушки
Это очень простая функция сложения. Значения этих двух параметров можно получить с помощью Hook, что эквивалентно добавлению кода console.log(a,b) перед возвратом, чтобы получить значения этих двух параметров. два могут быть выведены для анализа. Затем вы можете использовать следующий метод, чтобы перезаписать функцию, и этот метод является режимом декоратора в JavaScript.
let _add = addadd = function () { console.log('arguments', аргументы) let result = _add.apply(this, аргументы) console.log('result', result) return result // Если результат не требуется, затем напрямую верните _add()}Полный код
function add(a, b) { return a + b} let _add = addadd = function () { console.log('arguments', аргументы) let result = _add.apply(this, аргументы) console.log('result' , результат) вернуть результат } add(1, 2)Повторный вызов add(1,2) выведет параметры аргументов и результат 3. Реализован очень простой HOOK.
Однако этот пример может быть слишком простым. Я хочу показать, что с помощью Hook мы можем найти функцию и переменную, которую хотим перехватить, и посредством ряда операций (копирование функции, метапрограммирование), пока функция есть. запущен или использован (значение, модификация), мы можем получить желаемые результаты (результаты до и после (например, до шифрования, после шифрования)). Это наша цель.
Пример, приведенный в книге, предназначен для иллюстрации того, что вы хотите добавить некоторые функции к определенной исходной функции (например, добавить здесь), но исходная функция может быть написана другими разработчиками, поэтому прямое изменение самой исходной функции может привести к неизвестная ошибка, поэтому вы можете использовать описанный выше метод для копирования исходной функции, не разрушая исходную функцию.