Через 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, время: 05:05. |