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