Меня интересует этот момент: catsFavoriteFood[name];
Откуда в обьекте информация что именно первый параметр это name? ведь мы это нигде не прописывали. Вообще нет обращения к name, как к структуре ключ=значение. Надеюсь понятно обьяснила. Кто может, поясните пожалуйста, никак не укладывается в голове эта информация.
Дословно, "прочитай в объекте catsFavoriteFood ключ со значением, которое мы поместили в переменную name".
В нашем случае, переменная name - аргумент функции, в него записывается значение, которое мы передаем во время вызова этой функции. В примере выше, это Снежок.
Проблема в material – у нас нет такой переменной. Значение для material нам нужно либо передавать во время вызова функции (предварительно добавив такой аргумент в код функции-метода), либо заменить material на this.material, т.е. будем обращаться к полю material этого объекта.
Пример из теории с пояснениями как я это вижу, может кому пригодится для понимания:
// Мы записали в объект не характеристику вида name: 'Кекс', а соотношение имени кота и лакомства, которое по вкусу именно ему.
var catsFavoriteFood = {
Кекс: 'рыба',
Рудольф: 'котлета',
Снежок: 'сметана'
};
// Создали функцию, которая возвращает строку с любимой едой
var printFavoriteFood = function (name) {
/* Здесь мы связали свойство объекта catsFavoriteFood с ПАРАМЕТРОМ функции printFavoriteFood с помощью [], таким образом name теперь ассоциируется как свойство объекта и далее в вызове функции мы просто выбираем нужное нам свойство (Кекс, Рудольф или Снежок), что при выводе нам даст соответствующее ему значение */
return 'Моя любимая еда — ' + catsFavoriteFood[name];
};
/* ВНИМАНИЕ! Мы вызываем функцию printFavoriteFood где в качестве АРГУМЕНТА для ПАРАМЕТРА функции выступает свойство объекта catsFavoriteFood, а именно 'Снежок' */
// Выведет: Моя любимая еда — сметана
console.log(printFavoriteFood('Снежок'));