Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как повесить обработчик на событие "вызов функции"? (https://javascript.ru/forum/misc/13793-kak-povesit-obrabotchik-na-sobytie-vyzov-funkcii.html)

stopkran 14.12.2010 08:11

Как повесить обработчик на событие "вызов функции"?
 
Догадываюсь, что это "идеологически невозможно". В более общем плане задача такая: вызывается по очереди несколько функций, хочу измерить время работы каждой. Сейчас делаю так:

function func (){
    var d0 = new Date()
    <тело функции>
    addLog("func: ", d0)
}


Первое упрощение могло бы быть примерно таким: в конце исполняемой функции вызывать addLog() без параметров, а параметры - d0 и имя исполняемой функции получать внутри addLog(). Возможно ли это?

Второе (и третье): можно ли в javascript сделать так, чтобы при вызове любой функции всегда срабатывала ещё одна определённая функция? Или, например, чтобы при вызове любой функции значение (пусть глобальной) переменной d0 устанавливалось в new Date()?

B@rmaley.e><e 14.12.2010 09:46

Если стоит задача измерять время работы функции, то создайте функцию-обертку для замеров.
function profiling(fnc){
  var start = new Date;
  fnc();
  return {fnc: fnc.name, time: new Date - start};
}

stopkran 15.12.2010 09:17

Цитата:

Сообщение от B@rmaley.e><e
return {fnc: fnc.name, time: new Date - start};

не получается: у моих функций почему-то нет свойства name

e1f 15.12.2010 14:15

Оно есть вроде бы только в FF

Kolyaj 15.12.2010 14:58

Оно есть везде, если оно указано. У анонимных функций его, как ни странно, нет.

e1f 15.12.2010 15:24

Opera 10.63 есть, IE 8 нет.

Kolyaj 15.12.2010 16:06

Дада, в IE "баг". Там имя функции можно из func.toString() вытащить.

stopkran 16.12.2010 09:27

Цитата:

Сообщение от Kolyaj
У анонимных функций его, как ни странно, нет.

Значит, обёртка (типа предлагаемой Бармалеем) для анонимных функций принципиально невозможна?

monolithed 16.12.2010 10:36

А объясните мне, почему это свойство в нижеприведенном контексте выводит название iframe'a?
(function foo(){alert(name)})();

x-yuri 16.12.2010 10:53

Цитата:

Сообщение от stopkran
Значит, обёртка (типа предлагаемой Бармалеем) для анонимных функций принципиально невозможна?

как сказали выше, возможна

Цитата:

Сообщение от monolithed
А объясните мне, почему это свойство в нижеприведенном контексте выводит название iframe'a?

а что оно по-твоему должно выводить?


Часовой пояс GMT +3, время: 17:49.