18.12.2011, 02:28
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сообщение от FINoM
|
Не совсем понимаю о чем ты. Кинул исключение, всё остановилось. И что?
|
Если тебя этот вариант устраивает, то все в порядке.
Я бы, в данном случае поймал бы исключение, предал бы в обработчик события, и затем передал бы его дальше, наверх
|
|
18.12.2011, 02:51
|
|
Новичок
|
|
Регистрация: 05.09.2010
Сообщений: 2,298
|
|
Сообщение от Gvozd
|
бы, в данном случае поймал бы исключение, предал бы в обработчик события, и затем передал бы его дальше, наверх
|
Так?
window.callEvent = function(func, callback){
return function(){
var args = Array.prototype.slice.call(arguments);
var result;
try {
result = func.apply(this, arguments);
} catch (e) {
result = e;
}
callback(result, args, this);
return result;
}
}
UPD Хотя нет, бред.
Последний раз редактировалось FINoM, 18.12.2011 в 03:04.
|
|
18.12.2011, 02:51
|
|
Новичок
|
|
Регистрация: 05.09.2010
Сообщений: 2,298
|
|
Сообщение от B@rmaley.e><e
|
В данном случае можно будет только вернуть новую функцию, для которой будет назначен соответствующий обработчик.
|
Я о том же.
|
|
18.12.2011, 03:09
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
не совсем
window.callEvent = function(func, callback){
return function(){
var args = Array.prototype.slice.call(arguments);
var result;
try {
result = func.apply(this, arguments);
} catch (e) {
callback(e, args, this);
throw e;
}
callback(result, args, this);
return result;
}
}
|
|
18.12.2011, 03:14
|
|
Новичок
|
|
Регистрация: 05.09.2010
Сообщений: 2,298
|
|
Gvozd,
ок, спасибо.
|
|
18.12.2011, 03:40
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
(не обновил страницу перед отправкой)
Сообщение от FINoM
|
Только вот не могу придумать, как это сделать через Function.prototype.
|
так что ли? Правда непонятно, зачем эти события отлавливать.
Сообщение от Gvozd
|
а ну-ка, выкинь исключение в наблюдаемой функции))))
|
а что должно произойти?
Последний раз редактировалось x-yuri, 18.12.2011 в 03:43.
|
|
18.12.2011, 05:09
|
|
Новичок
|
|
Регистрация: 05.09.2010
Сообщений: 2,298
|
|
Сообщение от x-yuri
|
Правда непонятно, зачем эти события отлавливать.
|
Для дебага. Вот хочешь ты узнать сколько раз была вызвана функция или метод (кстати, может туда добавить счетчик?), какие аргументы были переданы, каков был результат, каков контекст вызова, ловить исключения (спасибо Гвоздю). И при этом ты совершенно не затрагиваешь функцию, которую тестируешь.
Да, и это просто спортивный интерес. Меня полгода назад спросили, можно ли ловить событие вызова какой-нибудь функции, я покрутил пальцем у виска и сказал "нет".
Сообщение от x-yuri
|
так что ли?
|
А что оно делает?
Идея в том, что где-то определена функция или метод (даже встроенный, что было продемонстрировано на примере) и ты вешаешь обработчик (псевдообработчик) на её вызов. Я не знаю, как яснее выразиться.
|
|
18.12.2011, 05:37
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Сообщение от FINoM
|
Для дебага.
|
для этого есть отладчик (журналирование, в первую очередь)
Сообщение от FINoM
|
И при этом ты совершенно не затрагиваешь функцию, которую тестируешь.
|
ради чего усложняем свою жизнь?
Сообщение от FINoM
|
А что оно делает?
|
перехватывает событие вызова функции
|
|
18.12.2011, 05:42
|
|
Новичок
|
|
Регистрация: 05.09.2010
Сообщений: 2,298
|
|
Сообщение от x-yuri
|
перехватывает событие вызова функции
|
Я ниже вызвал f() и ничего не произошло, кроме, собственно, вызова функции.
Сообщение от x-yuri
|
ради чего усложняем свою жизнь?
|
Кто усложняет-то?
|
|
18.12.2011, 12:59
|
|
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
Сообщение от trikadin
|
Я говорю о том, чтобы при создании ф-ции добавлять к ней коллбек и способ добавления новых коллбеков. Путем сохранения Function в переменную и переопределения его. Вряд ли это реально, но это просто идея.
|
Ну если один раз обернуть функцию, то в дальнейшем уже можно добавлять события на ту же самую функцию, не создавая новых.
Но как минимум один раз обернуть придётся.
|
|
|
|