Здравствуйте уважаемые старожилы JS.
Постоянно сталкиваюсь с недостатком такой функциональности, но как решить данную проблему не понимаю. Пробовал искать по запросам, но не до конца понимаю как задавать вопрос. Поэтому задаю как задачку.
Сферический стенд таков: Есть класс, который должен подсчитывать количества удачных ajax запросов. Из класса создается объект, следовательно не класс (статические методы), а объект начинает хранить у себя результаты удач/попыток. Можно создать несколько таких объектов, например для решения задачи тестирования нескольких серверов в онлайн.
Но есть проблема, которая как я уже написал, могу сформулировать в коде:
// Создадим условный класс<br>
var CClass = function() {<br>
this.success = 0; // количество удачных попыток<br>
this.tries = 0; // количество попыток посылки сообщения<br>
<br>
// пропустите метод на текущий момент, смотрите ниже<br>
this.get = function() {<br>
this.addTries();<br>
jQuery.get(window.location.href, function(){<br>
//this.addSuccess(); - упс this !== текущему объекту<br>
//CClass.addSuccess(); - обращение к статическому методу не правильно<br>
// как вызвать this.addSuccess() у объекта который вызвал callback?<br>
})<br>
};<br>
<br>
this.addSuccess = function(){<br>
this.success++;<br>
};<br>
<br>
this.addTries = function(){<br>
this.tries++;<br>
};<br>
}<br>
<br>
var obj = new CClass();<br>
<br>
obj.get(); // смотим в CClass.get<br>
От себя добавлю.
Если дело касается разработки интерфейса, где есть всего набор статических классов (фактически неймспейсов), то эти callback-и обрабатываются легко. А в случае с динамическим кодом каким я привел вам выше, я просто «теряю данный объект из вида». Прошу так же заметить, я не держу obj в глобальной видимости, на него ссылки нет, она может быть создана где угодно. Мне важно, что бы продолжение обработки после ajax приходился на тот же объект.
Как-то давно работал в C#, там есть стандарт передавать в параметрах обязательный eventSender объект (объект который вызвал данное событие). В JavaScript (jQuery) я этого с ходу не нашел, возможно я что-то делаю не так. Прошу помощи.
UPD:
Спасибо благодаря вам нашел распрекрасную статью, рекомендую к прочтению. Спасибо.
learn.javascript.ru/bind