Объект как словарь. Не понятна теория

var catsFavoriteFood = {
‘Кекс’: ‘рыба’,
‘Рудольф’: ‘котлета’,
‘Снежок’: ‘сметана’
};

var printFavoriteFood = function (name) {
return 'Моя любимая еда — ’ + catsFavoriteFood[name];
};

console.log(printFavoriteFood(‘Снежок’));
// Выведет: Моя любимая еда — сметана

Меня интересует этот момент: catsFavoriteFood[name];
Откуда в обьекте информация что именно первый параметр это name? ведь мы это нигде не прописывали. Вообще нет обращения к name, как к структуре ключ=значение. Надеюсь понятно обьяснила. Кто может, поясните пожалуйста, никак не укладывается в голове эта информация.

Дословно, "прочитай в объекте catsFavoriteFood ключ со значением, которое мы поместили в переменную name".
В нашем случае, переменная name - аргумент функции, в него записывается значение, которое мы передаем во время вызова этой функции. В примере выше, это Снежок.

Спасибо за пояснение. В процессе прохождения вроде разобралась. Может поскажите почему мой код не работает?

var materialPrice = {
‘wood’: 1000,
‘stone’: 1500,
‘brick’: 2000
};

var house = {
rooms: 10,
floors: 5,
material: ‘wood’,
coefficient: 10.5,

calculateSquare: function() {
return (this.rooms * this.coefficient * this.floors);
},

calculatePrice: function() {
return (this.calculateSquare * materialPrice[material] );
}
};

Проблема в material – у нас нет такой переменной. Значение для material нам нужно либо передавать во время вызова функции (предварительно добавив такой аргумент в код функции-метода), либо заменить material на this.material, т.е. будем обращаться к полю material этого объекта.

P.S. Форматируйте код в сообщении, примеры здесь: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#code
Где-то тут бегала гифка-пример на форуме, м.б. тов. @Hierumo подскажет где взять.

сейчас я добавила this, но резутат проверки выдает NaN.
var materialPrice = {
‘wood’: 1000,
‘stone’: 1500,
‘brick’: 2000
};

var house = {
  rooms: 10,
  floors: 5,
  material: 'wood',
  coefficient: 10.5,
  
  calculateSquare: function () {
    return (this.rooms * this.coefficient *  this.floors); 
  },
  
  calculatePrice: function () {
   return (this.calculateSquare * materialPrice[this.material]);
  }
};

Это функция, ее нужно вызвать:

calculatePrice: function () {
   return (this.calculateSquare() * materialPrice[this.material]);
}

Иначе, во время умножения интерпретатор пытается неявно преобразовать this.calculateSquare в число и получает NaN.

Спасибо большое! Наконец то разобралась :slight_smile: