Методы объекта
Имя и цена кружки уже лежат вместе. Странице не хватает маленькой работы, которая принадлежит самой кружке: собрать подпись, увеличить счёт корзины, поздороваться с покупателем. Функция сидит на объекте. Это и есть метод.
После ключей и списков
Урок про свойства добавлял поле, снимал другое, спрашивал через in, заходил во вложенный объект и получал имена через Object.keys. Функция там не запускалась. Здесь значение свойства — сама функция, и её запускают с объекта, который её держит.
Пять ходов с методом
📊 Сохранить, вызвать, краткая запись, this, аргумент
| Ход | Синтаксис | Что получается |
|---|---|---|
| сохранить | greet: function () { return "Hi"; } |
функция, сидящая на объекте |
| вызвать | product.greet() |
функция выполняется, вы получаете результат |
| краткая запись | label() { return this.name; } |
та же разновидность функции, короче |
| this | this.name внутри метода |
объект, который стоял перед точкой |
| аргумент | cart.add(3) |
дополнительный вход только для этого вызова |
Сначала назовите ход, потом пишите строку. Сохранение функцию не запускает. Краткая запись — не новый тип значения. this — не глобальное имя товара, которое вы надеетесь найти. Аргумент — вход этого вызова, а не второй объект.
let product = {
name: "Mug",
greet: function () {
return "Hi";
}
};
console.log(typeof product.greet);
Значением может быть функция
name хранит строку. greet хранит функцию. typeof product.greet даёт "function". Пока ничего не выполнялось, Hi не видно. Имя кружки остаётся рядом с функцией.
let product = {
name: "Mug",
greet: function () {
return "Hi";
}
};
console.log(product.greet());
Скобки — кнопка запуска
product.greet() входит в функцию. Консоль печатает Hi. Уберите скобки — перед вами сама функция, а не то, что она возвращает. Точка говорит, какому объекту принадлежит вызов.
let product = {
name: "Mug",
label() {
return this.name;
}
};
console.log(product.label());
Краткая запись — только более плотное письмо
В фигурных скобках label() { ... } кладёт функцию на ключ label. Это та же разновидность свойства, что и greet: function () { ... }, только печатать меньше. product.label() её запускает. Тело читает this.name, консоль показывает Mug.
let product = {
name: "Mug",
price: 8,
tag() {
return this.name + " — " + this.price;
}
};
console.log(product.tag());
При простом вызове this — объект перед точкой
product.tag() значит: выполни tag, и пусть this будет product. Тогда this.name и this.price — поля этой кружки. Консоль печатает Mug — 8. Голое name внутри метода — другой поиск, не свойство. Когда вызов больше не имеет вида object.method(), this может указывать в другое место — это следующий урок. Здесь остаётся простой вызов.
let cart = {
count: 2,
add(extra) {
this.count = this.count + extra;
return this.count;
}
};
console.log(cart.add(3));
Метод берёт вход для этого вызова
add ждёт extra. cart.add(3) передаёт 3, прибавляет его к count и возвращает новую сумму. Консоль печатает 5. Корзина хранит обновлённый count. Аргумент живёт на время вызова; свойством он станет, только если вы сами его сохраните.
Берите ход, который подходит к задаче
Функция должна жить на объекте? Сохраните её, длинной формой или краткой. Нужен результат? Вызывайте через (). Нужны собственные поля объекта? Читайте их через this. Число нужно только на этот запуск? Передайте аргумент. Object.keys перечислял имена на прошлой странице. Следующая остаётся с this, когда форма вызова меняется.
Поставьте подпись метода на страницу
Дайте товару name, price и tag. Запишите product.tag() в абзац.
<!DOCTYPE html>
<html>
<head>
<title>object-methods — page</title>
</head>
<body>
<p id="line">…</p>
<script>
let product = {
name: "Mug",
price: 8,
tag() {
return this.name + " — " + this.price;
}
};
let box = document.getElementById("line");
box.textContent = product.tag();
</script>
</body>
</html>
Абзац показывает Mug — 8. tag собрал эту строку из собственных полей товара. Поменяйте только name или price, обновите страницу и прочитайте новую строку. Следующий урок: ключевое слово this — куда указывает this, когда вызов уже не простой object.method().
Шаги практики
- Положите функцию на
greetи выведитеtypeofэтого свойства. - Вызовите
product.greet()и прочитайтеHi. - Напишите
labelкраткой записью и выведитеproduct.label(). - Соберите
tag, чтобыthis.nameиthis.priceстали одной строкой. - Начните
countс 2, вызовитеadd(3)и прочитайте5. - В HTML-демо поменяйте только
nameилиprice, обновите страницу, прочитайте абзац.
Частые срывы
- Печатать
product.greetбез()и ждатьHi - Принять краткую запись
label() {}за строковое свойство - Писать голое
nameвнутри метода вместоthis.name - Ждать, что
cart.add(3)оставитcountравным 2 - Идти к
Object.keys, когда имелся в виду вызов метода - Ставить стрелочную функцию методом этой страницы — следующий урок следит за
this, когда форма вызова меняется
Кратко
- Метод — это функция, сохранённая как свойство
object.method()запускает её и отдаёт возвращённое значение- Краткая запись
name() {}сохраняет функцию того же рода - При простом вызове
this— объект перед точкой - Параметр принимает аргумент этого вызова
- Строка метода может заполнить одну строку на странице
- Дальше: ключевое слово
this, когда вызов — неobject.method()
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху