Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   ООП: теряется метод (https://javascript.ru/forum/misc/12735-oop-teryaetsya-metod.html)

Vulkan 31.10.2010 15:34

ООП: теряется метод
 
Такое дело, вот написал под себя маленькую функцию для удобства 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. Сам код правильный, проверял.

Gvozd 31.10.2010 15:45

а с чего вы решили, что this внутри onreadystatechange будет показывать именно на ваш объект?!
он должен указывать на window, так как вызывается именно в его контексте.
почитайте про замыкания, и объект this
в статьях на этом сайте вполне хорошо про это написано

Vulkan 31.10.2010 16:13

Gvozd, да, Вы правы, совсем забыл что callback вызываю в контексте onreadystatechange, спасибо, почитаю про замыкания.


Часовой пояс GMT +3, время: 22:29.