@unbeknownU

Обращение к свойствам объекта из другого объекта?

Привет, объясните, что я не понимаю или упускаю.
Есть функция, которая создаёт некий объект, в котором также есть вложенные объекты, а затем этот объект вставляет в заранее созданный пустой массив, всё это делается с помощью цикла n-раз. Прикладываю ссылку на код и скрины в спойлерах. Песочница

Мои рассуждения:

Стадия, когда всё понятно.
1) На первом скрине все ожидаемо, вызываю функцию, получаю заполненный объектами массив. Вызываю console.log и передаю 0-ой элемент массива и вижу 0-ой объект. Также всё понятно, если обращаться к свойствам и свойствам внутри свойств, и даже методу, которые сейчас просто возвращает число.
spoiler
5c7439e7345bb035465914.png

Стадия, когда понятно не всё.
2) Здесь я немного изменяю функцию d() в объекте, я хочу, чтобы она возвращала значение свойства c, эти два свойства находятся в одном объекте. Я вызываю этот метод и это не работает! В консоли ошибка: y is not defined. Почему? Свойства объекта же знают друг про друга? Но что ещё более не понятно, если вместо return y.c, я укажу return this.c, то функция возвращает значение свойства c. Если я правильно понимаю контекст вызова, то вместо this.c и должно подставиться y.c?
spoiler
5c7439f86b9da655584826.png
spoiler
5c7439fe21c7f823273170.png

Стадия, когда не понятно вообще всё.
3) Сейчас я пытаюсь обратиться к свойствам соседних объектов, но получаю в консоли ошибку: x is not defined. Почему я не могу обратиться так к другим объектам? И самое непонятное для меня во всём этом то, что если я выношу метод из вложенного объекта и опять обращаюсь к свойствам других объектов, то это работает! Это последний скрин.
spoiler
5c743a02464d7168946951.png
Если кратко сформулировать суть, то я не могу понять, почему я не могу обратиться из метода вложенного объекта к соседнему объекту? Надеюсь более менее понятно, что я имел в виду.

spoiler

Вообще, это небольшая тестовая задача, нужно создать массив объектов объявлений, для этого есть некоторые данные, исходя из которых генерируется каждый объект, и я наткнулся на момент, когда нужно генерировать поле адреса, а оно должно состоять из значений двух других полей, поэтому я решил, что это поле адреса должно быть функцией, которая будет обращаться к тем двум полям и возвращать их объединенное значение, но это не работает.
  • Вопрос задан
  • 425 просмотров
Пригласить эксперта
Ответы на вопрос 1
profesor08
@profesor08 Куратор тега JavaScript
Потому что внутри объекта можно обратиться к полям самого объекта. В твоем случае у это объект, а его поля c, d, знают только о друг друге. Ничего о родителе они не знают. Да и вообще, пытаться делать то, что ты хочешь это плохо. Код должен быть ясен и понятен.

const x = {
  a: "fw",
  b: 2,
};

const c = 323232;
  
const y = {
  c: c,
  d: function() {
  	return c * x.b;
  },
};
  
const location = {
  x: 500,
  y: 600,
};
    
items.push({
  x,
  y,
  location,
});
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
SummerWeb Ярославль
от 120 000 до 180 000 ₽
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
Brightdata Тель-Авив
от 5 500 до 6 500 $