madmages
@madmages
Человек прямоходящий

Как выполнить некоторое действие во время вызова любой функции javascript?

Вот стало интересно, возможно ли вызвать, допустим, console.log(1) при каждом вызове любой функции?
Я вот думал что это будет выглядеть примерно так
Function.prototype.constructor = function (){
    Function.prototype.constructor();
    console.log(1);
};
function f() {
    console.log(2);
}
f()

но на вывод получается только 2 :(
  • Вопрос задан
  • 3058 просмотров
Решения вопроса 1
metamorph
@metamorph
Насколько я помню, это невозможно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Нет. Function.prototype.constructor - просто ссылка на Function для идентификации инстанса конструктора. Тут и переопределение конструктора Function не поможет - функции обычно задаются литералом, без его использования. Можно это сделать с создаваемыми через конструктор, но оно вам надо? :)

window.Function = (function(Function){
  return function(){
    var fn = Function.apply(window, arguments);
    return function(){
      console.log('run');
      return fn.apply(this, arguments);
    }
  }
})(Function);
Function('console.log(1)')() // => run 1

Кстати, у вас вызов Function.prototype.constructor внутри него же - бесконечный рекурсивный вызов. Да и console.log тоже функция - если сделаете, что сформулировали - сами рады не будете - тоже рекурсия.
Ответ написан
Комментировать
qmax
@qmax
программер
Было бы надёжнее заменить обёртками все методы интересуемого прототипа/объекта.
Ответ написан
LestaD
@LestaD
Веб разработчик
Ждите реализации объекта Proxy
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы