| 
 Через argument.callee не получается переписать функцию. 
var myObj = {
	doAction: function(){
		this.makeHTMLRequest(query, doSmth);
	},
	makeXMLRequest: function(query, callback){
		var   that = this,
			callee = arguments.callee;
		$.ajax({ 
			success: function(){
				//override original method "makeXMLRequest"
				callee = function(query, callback){		//не работает, а с "that.makeXMLRequest" работает
					callback();
				};
			}
		});
	}
}
Почему нельзя переписать метод "makeXMLRequest" через "callee", а через "that.makeXMLRequest" - можно? А вообще задача - не вызывать каждый раз асинхронный запрос, а получить один раз данные, а при следующем вызове брать уже полученные и подставлять их. | 
| 
 1. В Вашем случае Вы просто изменяете значение переменной callee. С какой стати должен измениться that.makeXMLRequest - непонятно. 2. Даже написав arguments.callee Вы ничего не измените - просто свойство callee объекта arguments будет указывать не на that.makeXMLRequest, а на новую функцию. 3. А вот написав that.makeXMLRequest все сработает так, как нужно. Так как that ссылается именно на тот объект, который Вам нужен, то и свойство будет перезаписано для этого объекта (При этом самой замены функции формально не произойдет, изменится лишь ссылка на нее). | 
| 
 Идея ясна, приблизительно будет так: 
myObj.makeXMLRequest=(function(){
  var callee=function(query,callback){
    $.ajax({success:function(){
      callee=function(query,callback){callback();}
    }});
  }
  return function(){return callee.apply(this, arguments.callee);};
})();
 | 
| Часовой пояс GMT +3, время: 01:30. |