У меня есть прототип, имеющий метод, который я могу добавить обратные вызовы с: (. Игнорируйте еще часть для data_arg = верно, как это не имеет значения)Странно рекурсивный бесконечный цикл я не могу отследить
/*
* Add a callback function that is invoked on every element submitted and must return a data object.
* May be used as well for transmitting static data.
*
* The callback function is supposed to expect a jQuery element as single parameter
* and must return a data object (for additional data to be sent along with the one already given upon initialization).
* Adding multiple callback functions results in those functions being invoked in the same order as they were added.
*
* 1) Therefore subsequent assignments to the same key in the data array override those that were performed by a previous callback function.
* 2) If data_arg = true is given, the data returned by the callback function that was previously called is given to the new_callback as 2nd argument, so it can be manipulated.
* However, even if it isn't, the unchanged data must be returned anyway to have any effect.
*/
this.add_data_callback = function(new_callback, data_arg) {
if(this.data_callback) {
old_callback = this.data_callback;
if(!data_arg) {
//alert('add it');
//alert(old_callback);
//alert(new_callback);
this.data_callback = function(element) {
//alert('do it');
//alert(old_callback);
//alert(new_callback);
return jQuery.extend(old_callback(element), new_callback(element));
};
}
else {
this.data_callback = function(element, data) {
return new_callback(element, old_callback(element));
};
}
}
else {
//alert('add the first');
//alert(new_callback);
this.data_callback = new_callback;
}
};
В моем конкретном случае я добавляю три функции обратного вызова. Однако, если this.data_callback(), наконец, вызывается для элемента, он приводит к бесконечной бесконечности цикла. В моей попытке отследить ошибку вниз, оповещения выше (да, я знаю, что вы отладочные инструменты для этого, но это был путь более комфортно, как это) передал следующее понимание вопроса:
- вызывается анонимная функция/закрытие (тот, который содержит jQuery.extend()). new_callback содержит третью функцию обратного вызова. old_callback содержит другое ...
- анонимная функция, которая называется. new_callback содержит вторую функцию обратного вызова. old_callback должен содержать 1-ю функцию обратного вызова, но на самом деле это еще один ...
- анонимный обратный вызов, который называется. new_callback снова содержит вторую функцию обратного вызова. old_callback содержит анонимную функцию
- ...
Теперь, что мне не хватает? Это какая-то странная магия закрытия или просто какая-то явная ошибка, которую я, видимо, не вижу?
Заранее благодарен!
Судя по использованию ключевого слова 'this', код отправляется как часть класса, а old_callback может быть частным свойством этого класса. –
Awwwww. @ Энди: Это не так. – balu
@codethief: продолжить дальше ;-) @Pointy: +1. –