ООП: теряется метод
Такое дело, вот написал под себя маленькую функцию для удобства AJAX соединения:
function ajax(params, url, method, box, callback){ this.params=params; this.queryStr=''; this.url=url; this.method=method; this.box=box; if(callback){this.callback=callback;} } ajax.prototype.query=function(){ xmlhttp.open(this.method, this.url, true); xmlhttp.onreadystatechange = function(){ if(xmlhttp.readyState==4){ if(this.box!=null){ if(typeof(this.box)!='string'){this.box.innerHTML=xmlhttp.responseText;} else {$(this.box).innerHTML=xmlhttp.responseText;}} if(this.callback && typeof(this.callback)=='function'){alert('true'); this.callback();}}} xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); for(var key in this.params){ if(keys==0){this.queryStr+=key+'='+this.params[key];} else {this.queryStr+='&'+key+'='+this.params[key];} keys++;} xmlhttp.send(this.queryStr); } Вызываю так: var someVar=new ajax({a:5, b:6, c:7}, '/some.php', 'post', null, function(){...}); someVar.query(); И почему то в методе query нет доступа к this.callback, а если проверку typeof запустить то покажет 'undefined', не могу понять почему, ведь к остальным свойствам доступ отличный. P.S. Сам код правильный, проверял. |
а с чего вы решили, что this внутри onreadystatechange будет показывать именно на ваш объект?!
он должен указывать на window, так как вызывается именно в его контексте. почитайте про замыкания, и объект this в статьях на этом сайте вполне хорошо про это написано |
Gvozd, да, Вы правы, совсем забыл что callback вызываю в контексте onreadystatechange, спасибо, почитаю про замыкания.
|
Часовой пояс GMT +3, время: 22:29. |