Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.11.2008, 13:22
Новичок на форуме
Отправить личное сообщение для Flake Посмотреть профиль Найти все сообщения от Flake
 
Регистрация: 21.10.2008
Сообщений: 8

ООП. Не виден объект из метода.
Здравствуйте.

Есть класс:
function Emulator(id)
{
	this.object_id = id;
	this.velocity = document.getElementById("velocity"+this.object_id).value;
	this.track = document.getElementById("track"+this.object_id).value;

	this.xmlHttp = createXmlHttpRequestObject();
  
  this.loadObjects = function()
	{
		if (this.xmlHttp && (this.xmlHttp.readyState == 4 || this.xmlHttp.readyState == 0))
    {
      var query = "emulation.php?track="+this.track+"&object_id="+this.object_id+"&velocity="+this.velocity;
  		this.xmlHttp.open("GET", query, true);
  		this.xmlHttp.onreadystatechange = this.handleLoadObjects;
  		this.xmlHttp.send(null);
    }
	}
	
	this.handleLoadObjects = function()
	{
    if (this.xmlHttp.readyState == 4 && this.xmlHttp.status == 200)
    {
      alert("ok");
    }
  }
}


При его вызове:
var em = new Emulator(1);
  em.loadObjects();

Отправка данных происходит нормально. Но в обработчике handleLoadObjects не видит this.xmlHttp, т.е. ругается: Ошибка: this.xmlHttp is undefined.

Какой синтаксис будет правильным?

Последний раз редактировалось Flake, 21.11.2008 в 13:25.
Ответить с цитированием
  #2 (permalink)  
Старый 21.11.2008, 13:26
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Самым простым выходом будет инициализация в начале функции loadObjects
var self = this;
И потом уже использовать self вместо this.

http://javascript.ru/tutorial/object/thiskeyword
Ответить с цитированием
  #3 (permalink)  
Старый 21.11.2008, 13:27
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

var t = this;
this.handleLoadObjects = function() {
    if (t.xmlHttp.readyState == 4 && t.xmlHttp.status == 200)  {
      alert("ok");
    }
}


аааа, не успел
Ответить с цитированием
  #4 (permalink)  
Старый 21.11.2008, 13:31
Новичок на форуме
Отправить личное сообщение для Flake Посмотреть профиль Найти все сообщения от Flake
 
Регистрация: 21.10.2008
Сообщений: 8

Спасибо мужики
Ответить с цитированием
  #5 (permalink)  
Старый 21.11.2008, 13:53
Новичок на форуме
Отправить личное сообщение для Flake Посмотреть профиль Найти все сообщения от Flake
 
Регистрация: 21.10.2008
Сообщений: 8

Возник ещё вопрос.
Мне из handleLoadObjects надо вызвать loadObjects с паузой.

var myFunc = 't.loadObjects("'+object_id+'", "'+velocity+'", "'+track+'")';
setTimeout(myFunc, 3000);

Ругается что t - неизвестен.
Ответить с цитированием
  #6 (permalink)  
Старый 21.11.2008, 14:01
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

вызов будет осуществляться в глобальном контексте... А там t неопределён...
Ответить с цитированием
  #7 (permalink)  
Старый 21.11.2008, 14:05
Новичок на форуме
Отправить личное сообщение для Flake Посмотреть профиль Найти все сообщения от Flake
 
Регистрация: 21.10.2008
Сообщений: 8

И как тогда будет правильно?
Ответить с цитированием
  #8 (permalink)  
Старый 21.11.2008, 18:30
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

setTimeout(function() { self.loadObjects(); }, 10);
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение ссылки на объект из метода Octane Общие вопросы Javascript 7 21.08.2008 15:09