Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.03.2011, 11:29
Кандидат Javascript-наук
Отправить личное сообщение для Jurasmi Посмотреть профиль Найти все сообщения от Jurasmi
 
Регистрация: 25.11.2008
Сообщений: 115

Через 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" - можно?

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

1. В Вашем случае Вы просто изменяете значение переменной callee. С какой стати должен измениться that.makeXMLRequest - непонятно.

2. Даже написав arguments.callee Вы ничего не измените - просто свойство callee объекта arguments будет указывать не на that.makeXMLRequest, а на новую функцию.

3. А вот написав that.makeXMLRequest все сработает так, как нужно. Так как that ссылается именно на тот объект, который Вам нужен, то и свойство будет перезаписано для этого объекта (При этом самой замены функции формально не произойдет, изменится лишь ссылка на нее).
Ответить с цитированием
  #3 (permalink)  
Старый 23.03.2011, 12:54
Профессор
Отправить личное сообщение для SV0L0CH Посмотреть профиль Найти все сообщения от SV0L0CH
 
Регистрация: 07.11.2010
Сообщений: 301

Идея ясна, приблизительно будет так:
myObj.makeXMLRequest=(function(){
  var callee=function(query,callback){
    $.ajax({success:function(){
      callee=function(query,callback){callback();}
    }});
  }
  return function(){return callee.apply(this, arguments.callee);};
})();
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не получается присоединить функцию Namolem Events/DOM/Window 17 14.04.2010 18:46
Не получается передать в функцию значение javascript_pupil Events/DOM/Window 9 06.11.2009 15:32
Не получается загрузить баннер в раздел DIV методами Javascript через iframe ((( autobuh Общие вопросы Javascript 3 24.07.2009 19:24
как переписать через attachEvent olgatcpip Internet Explorer 3 13.07.2009 16:30
Как передать false через функцию? Tend Общие вопросы Javascript 7 16.03.2009 16:55