@dsmaslov

Как получить сразу значение из метода объекта с this?

var simillarAds = [
  {
    'author': {
      'avatar': generateAvatarUrl(1)
    },

    'offer': {
      'address': function () {
        return this.location.x + ', ' + this.location.y;
      },
      'location': {
        'x': randomInteger(X_LOCATION_START, X_LOCATION_END),
        'y': randomInteger(Y_LOCATION_START, Y_LOCATION_END)
      }
    }
  }
];


Если делать метод address анонимным и сразу вызывать его, то this теряет область видимости. Как в таком случае сделать так, чтобы объект address возвращал сразу значения из location.x ( функция, где генерируется случайное число и возвращается) и location.y (тоже) с помощью только ES5?

И можете приложить статью по этой теме? По потере this уже читал, но именно мою ситуацию нагуглить не смог.
  • Вопрос задан
  • 113 просмотров
Решения вопроса 1
@i1yas
можно так
var simillarAds = [
  {
    'author': {
      'avatar': generateAvatarUrl(1)
    },

    'offer': {
      get address () {
        return this.location.x + ', ' + this.location.y;
      },
      'location': {
        'x': randomInteger(X_LOCATION_START, X_LOCATION_END),
        'y': randomInteger(Y_LOCATION_START, Y_LOCATION_END)
      }
    }
  }
];
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@holymotion
У вас ничего и не теряется, коллсайт для функции это объект offer (в случае, если вызываете типа simillarAds[0].offer.address()) . Залогируйте this в функции address. Если вы получаете на выходе x, y - undefined, возможно, у вас не правильно отрабатывают функции randomInteger или X_LOCATION_* указывает на не то значение.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы