Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 18.12.2011, 02:28
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от FINoM
Не совсем понимаю о чем ты. Кинул исключение, всё остановилось. И что?
Если тебя этот вариант устраивает, то все в порядке.
Я бы, в данном случае поймал бы исключение, предал бы в обработчик события, и затем передал бы его дальше, наверх
Ответить с цитированием
  #12 (permalink)  
Старый 18.12.2011, 02:51
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 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.
Ответить с цитированием
  #13 (permalink)  
Старый 18.12.2011, 02:51
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от B@rmaley.e><e
В данном случае можно будет только вернуть новую функцию, для которой будет назначен соответствующий обработчик.
Я о том же.
Ответить с цитированием
  #14 (permalink)  
Старый 18.12.2011, 03:09
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от FINoM
Так?
не совсем
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;				 
		}
	}
Ответить с цитированием
  #15 (permalink)  
Старый 18.12.2011, 03:14
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Gvozd,
ок, спасибо.
Ответить с цитированием
  #16 (permalink)  
Старый 18.12.2011, 03:40
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

(не обновил страницу перед отправкой)

Сообщение от FINoM
Только вот не могу придумать, как это сделать через Function.prototype.
так что ли? Правда непонятно, зачем эти события отлавливать.

Сообщение от Gvozd
а ну-ка, выкинь исключение в наблюдаемой функции))))
а что должно произойти?

Последний раз редактировалось x-yuri, 18.12.2011 в 03:43.
Ответить с цитированием
  #17 (permalink)  
Старый 18.12.2011, 05:09
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от x-yuri
Правда непонятно, зачем эти события отлавливать.
Для дебага. Вот хочешь ты узнать сколько раз была вызвана функция или метод (кстати, может туда добавить счетчик?), какие аргументы были переданы, каков был результат, каков контекст вызова, ловить исключения (спасибо Гвоздю). И при этом ты совершенно не затрагиваешь функцию, которую тестируешь.

Да, и это просто спортивный интерес. Меня полгода назад спросили, можно ли ловить событие вызова какой-нибудь функции, я покрутил пальцем у виска и сказал "нет".

Сообщение от x-yuri
так что ли?
А что оно делает?
Идея в том, что где-то определена функция или метод (даже встроенный, что было продемонстрировано на примере) и ты вешаешь обработчик (псевдообработчик) на её вызов. Я не знаю, как яснее выразиться.
Ответить с цитированием
  #18 (permalink)  
Старый 18.12.2011, 05:37
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от FINoM
Для дебага.
для этого есть отладчик (журналирование, в первую очередь)

Сообщение от FINoM
И при этом ты совершенно не затрагиваешь функцию, которую тестируешь.
ради чего усложняем свою жизнь?

Сообщение от FINoM
А что оно делает?
перехватывает событие вызова функции
Ответить с цитированием
  #19 (permalink)  
Старый 18.12.2011, 05:42
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от x-yuri
перехватывает событие вызова функции
Я ниже вызвал f() и ничего не произошло, кроме, собственно, вызова функции.
Сообщение от x-yuri
ради чего усложняем свою жизнь?
Кто усложняет-то?
Ответить с цитированием
  #20 (permalink)  
Старый 18.12.2011, 12:59
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от trikadin
Я говорю о том, чтобы при создании ф-ции добавлять к ней коллбек и способ добавления новых коллбеков. Путем сохранения Function в переменную и переопределения его. Вряд ли это реально, но это просто идея.
Ну если один раз обернуть функцию, то в дальнейшем уже можно добавлять события на ту же самую функцию, не создавая новых.
Но как минимум один раз обернуть придётся.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сформировать URL для вызова функции klingan Общие вопросы Javascript 13 25.04.2013 20:55
Почему происходит проверка до вызова самой функции? wwwboy Общие вопросы Javascript 5 09.12.2011 03:37
Вставка элемента в место вызова функции belkir Элементы интерфейса 21 05.08.2011 08:59
запуск функции через событие radio DmitryT Элементы интерфейса 5 05.03.2011 10:26
Строка вызова функции DMH Общие вопросы Javascript 11 10.08.2010 09:06