JavaScript - использование объектов и методов? - PullRequest
1 голос
/ 30 ноября 2011

Когда я вызываю метод getResult, он возвращает неопределенное значение. Что я делаю не так?

var MyObjectResult = {"Success":1, "Fail":2, "Timeout":3, "None":4}

function MyObject()
{
   this.result = MyObjectResult.None;
   this.timout = 15;

   this.getResult = function ()
   {
      // Some calculation here and changing result
      // Logging (this.result shows that result has value of 1)
      this.result = MyObjectResult.Success;
      return this.result;
   }
}

var myObject = new MyObject();
var result = myObject.getResult();
// result is undefined

Ответы [ 4 ]

2 голосов
/ 30 ноября 2011

Я не вижу ничего плохого в опубликованном коде, поэтому я собираюсь сделать предположение о том, что в коде вы не показываете:

Выполняет ли отсутствующий код вычисления запрос ajax (или какую-либо другую асинхронную обработку) и устанавливает this.result в своей функции успеха? Если это так, функция getResult() немедленно вернется, прежде чем ваша обработка aysnc запустит свою функцию успеха или ошибки для обновления this.result. Если запись, упомянутая в вашем комментарии, происходит в функции успеха / неудачи, тогда она будет иметь правильное значение.

1 голос
/ 30 ноября 2011

Странно. У меня работает:

http://jsfiddle.net/y5Yk7/

0 голосов
/ 30 ноября 2011

возможно, слово "это" может иметь другое значение в вашей функции? так:

var MyObjectResult = {"Success":1, "Fail":2, "Timeout":3, "None":4}

function MyObject()
{
   this.result = MyObjectResult.None;
   this.timout = 15;
   var mythis = this;
   this.getResult = function ()
   {
      mythis.result = MyObjectResult.Success;
      return mythis.result;
    }
}

var myObject = new MyObject();
var result = myObject.getResult();
0 голосов
/ 30 ноября 2011

Оставляя кавычки вокруг Успех, Сбой, Тайм-аут и Нет должно заставить его работать.

Я настроил пример JSFiddle ; это прекрасно работает для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...