Казалось бы, объекты знаю, обращения к свойствам тоже. И вот простая задачка - голову сломал. Подскажите, пожалуйста, как быть:
var x = 5;
var y = 5;
var accomodation = {
"offer": {
"address": [this['location']['x'], this['location']['y']]
},
"location": {
"x": x,
"y": y
}
};
или
var accomodation = {
"offer": {
"address": [accomodation['location']['x'], accomodation['location']['y']]
},
"location": {
"x": x,
"y": y
}
};
Нужно, чтобы в address прописались значения x и y из location. Формат объекта - именно такой, как я написал: т.е. offer и location - это отдельные подобъекты объекта accomodation, их нельзя объядинять. Как ни извращался - получаю ошибку. В лучшем случае - address: [undefined, undefined], в худшем - что не может прочитать свойства от undefined. В чём проблема??
Если бы я понял, я бы сюда вопрос не задавал. Но уже голову сломал. К сожалению, это задача - маленький этап другой большой, который заблокировался тем, что эту я решить не могу.
А в вашем случае, при резоле объекта this и ссылка на объект ещё не существует. Поэтому ошибочка будет. Делайте через конструктор и get, set если нужны поля, а так методы. Почитайте про this и как происходит вычисление и присвоение переменных при работе движка JS.
Он не будет работать принципиально. Есть вариант через getter-ы и setter-ы добиться желаемого поведения. Но это будет необоснованно сложно, неожиданно для читающего (если речь идет о коде для работы в команде) и сложно реализовать для начинающего.
Если эта проблема - чать другой более важной, то забей на эту, реши главную задачу, а к этой части кода всегда можно вернутся.
Я бы реализовывал ситуацию “одни и те же значения location.x в accomodation.offer.address” как
var x = 5;
var y = 5;
class Accomodation {
offer = null;
location = null;
constructor(x,y) {
this.offer = {
address: [x,y]
};
this.location = {
x: x,
y: y
}
}
}
var acc = new Accomodation(x,y);