Объекты как аргументы
Функции и объекты хорошо сочетаются. Функция может принять целый объект в качестве аргумента и прочитать нужные ей свойства:
function describePet(pet) {
return `${pet.name}, возраст: ${pet.age}.`;
}
const rex = { name: "Рекс", species: "собака", age: 3 };
console.log(describePet(rex));
console.log(describePet({ name: "Киви", species: "попугай", age: 4 }));Рекс, возраст: 3.
Киви, возраст: 4.Параметр pet — это имя для того объекта, который вы передали при вызове: в первом вызове это объект Рекса, во втором — Киви. Вместо трёх аргументов для имени, вида и возраста вы передаёте один, а функция берёт из него то, что ей нужно.
Функция может принять и массив объектов. Эта возвращает средний возраст питомцев в массиве:
function averageAge(pets) {
let total = 0;
for (const pet of pets) {
total += pet.age;
}
return total / pets.length;
}
const pets = [
{ name: "Рекс", species: "собака", age: 3 },
{ name: "Белла", species: "кошка", age: 2 },
{ name: "Киви", species: "попугай", age: 4 }
];
console.log(averageAge(pets));3Вы пишете функцию один раз, и её можно использовать для любого массива питомцев: для этого магазина, для другого или для питомцев, которые поступят завтра.
Кстати, вы пользуетесь объектом с функциями с самого первого урока. console — это объект, а log — одно из его свойств. Его значение — функция, поэтому её вызывают со скобками: console.log(). Функция, хранящаяся в объекте, называется методом. Поэтому push() и includes() называют методами массива. Функцию можно хранить и в собственном объекте:
const dog = {
name: "Рекс",
bark: () => console.log("Гав!")
};
dog.bark();Гав!Задание
- 1
Допишите функцию
formatItem: она должна возвращать (а не выводить) название и цену полученного товара в виде текста вроде"Мяч: 60". Тогда цикл в конце выведет все четыре товара:Корм для собак: 250,Мяч: 60и так далее. - 2
Допишите функцию
totalPrice: она должна возвращать сумму цен всех товаров из массиваitems. Тогда последние две строки будут такими:Итого: 535иМаленькая корзина: 105.