Есть ли способ заставить любую функцию выводить оператор console.log при его вызове, зарегистрировав где-нибудь глобальный перехватчик (то есть, не изменяя саму функцию) или каким-либо другим способом?
97
Есть ли способ заставить любую функцию выводить оператор console.log при его вызове, зарегистрировав где-нибудь глобальный перехватчик (то есть, не изменяя саму функцию) или каким-либо другим способом?
Ответы:
Вот способ дополнить все функции в глобальном пространстве имен функцией по вашему выбору:
С одной стороны, никакие функции, созданные после вызова, не
augment
будут иметь дополнительного поведения.источник
fn.apply(this, arguments);
наreturn fn.apply(this, arguments);
return
к самой внутренней функции.На мой взгляд, это наиболее элегантное решение:
источник
Прокси-метод для регистрации вызовов функций
Есть новый способ использования прокси для достижения этой функциональности в JS. Предположим, что мы хотим иметь
console.log
каждый раз, когда вызывается функция определенного класса:мы можем заменить создание нашего класса прокси, который переопределяет каждое свойство этого класса. так:
убедитесь, что это действительно работает в Codepen
Помните, что использование
Proxy
дает вам гораздо больше возможностей, чем просто регистрация имен консоли.Кроме того, этот метод работает в Node.js тоже.
источник
Если вы хотите более целенаправленное ведение журнала, следующий код будет регистрировать вызовы функций для определенного объекта. Вы даже можете изменить прототипы объектов, чтобы все новые экземпляры тоже регистрировались. Я использовал Object.getOwnPropertyNames вместо for ... in, поэтому он работает с классами ECMAScript 6, у которых нет перечислимых методов.
источник
Вот некоторый Javascript, который заменяет добавляет console.log к каждой функции в Javascript; Поиграйте с ним на Regex101 :
Это «быстрый и грязный прием», но я считаю его полезным для отладки. Если у вас много функций, будьте осторожны, потому что это добавит много кода. Кроме того, RegEx прост и может не работать для более сложных имен / объявлений функций.
источник
Фактически вы можете прикрепить свою собственную функцию к console.log для всего, что загружается.
источник