Я обычно не человек из Javascript, но я углубился в чтение книги Дугласа Крокфорда и написание некоторых тривиальных полезных лакомых слов в качестве расширений Chrome и Node.js (обратите внимание, что этот вопрос не касается ни одного из них).
Сейчас я пытаюсь выяснить, как сохранить ссылку на объект, инициирующий запрос AJAX, а именно: как только я установлю обработчик события onload (это изнутри расширения Chrome, поэтому я используя базовый объект XMLHttpRequest), есть ли способ вернуться к MyObject
в следующем примере:
MyObject.prototype = {
PerformAction: function() {
this.Request = new XMLHttpRequest();
this.Request.open("GET", this.ConstructUrl(), true);
// From within ActionResultHandler, 'this' will always be the XMLHttpRequest
this.Request.onload = this.ActionResultHandler,
this.Request.send(null);
}
}
Выполнение этого точно назначит this
самим объектом запроса, и если я просто введу оболочку:
this.Request.onload = function() { ActionResultHandler() };
ну, это просто не будет ничего делать , потому что ActionResultHandler теперь выходит за рамки. Причина, по которой я спрашиваю здесь, состоит в том, что я нашел только тривиальные случаи манипулирования вызывающими (например, манипулирование тем, на что ссылается this
изнутри функции), но, учитывая, что Oav-ified Javascript и AJAX буквально повсюду, это должно Должна быть известная, простая проблема, но мой Google-фу подводит меня здесь. В C # события вызываются в контексте того, кто к ним присоединяется, а не объекта, инициирующего событие, поэтому это не происходит ежедневно. Возможно, есть гораздо лучший шаблон JS, который полностью избегает этой проблемы?