Пошук уроків, статей та іншого контенту
Додаватимете скорочені властивості, обчислювані назви та методи під час створення об’єктів.
Під час створення об’єкта часто потрібно записати властивість із таким самим ім’ям, як і змінна:
const name = "Марія";
const age = 25;
const user = {
name: name,
age: age
};
console.log(user);
// { name: "Марія", age: 25 }У JavaScript такий запис можна скоротити:
const name = "Марія";
const age = 25;
const user = {
name,
age
};
console.log(user);
// { name: "Марія", age: 25 }Якщо назва змінної збігається з назвою властивості, достатньо вказати її один раз. JavaScript автоматично створить властивість із відповідним значенням.
Ці два варіанти рівнозначні:
const city = "Львів";
const firstObject = {
city: city
};
const secondObject = {
city
};
console.log(firstObject);
console.log(secondObject);Скорочені властивості особливо зручні, коли об’єкт створюється з кількох змінних:
const title = "JavaScript";
const duration = 30;
const isPublished = true;
const lesson = {
title,
duration,
isPublished
};
console.log(lesson);Іноді назва властивості має зберігатися у змінній або формуватися під час виконання програми. Для цього використовують квадратні дужки:
const propertyName = "email";
const propertyValue = "user@example.com";
const user = {
[propertyName]: propertyValue
};
console.log(user);
// { email: "user@example.com" }Вираз у квадратних дужках обчислюється, а його результат використовується як назва властивості.
Без квадратних дужок JavaScript сприйме ім’я змінної буквально:
const propertyName = "email";
const wrongUser = {
propertyName: "user@example.com"
};
const correctUser = {
[propertyName]: "user@example.com"
};
console.log(wrongUser);
// { propertyName: "user@example.com" }
console.log(correctUser);
// { email: "user@example.com" }У першому об’єкті властивість називається propertyName. У другому — email, тобто значення змінної propertyName.
Назву можна сформувати за допомогою шаблонного рядка або іншого виразу:
const prefix = "user";
const field = "name";
const data = {
[`${prefix}_${field}`]: "Олена"
};
console.log(data);
// { user_name: "Олена" }У квадратних дужках можна використовувати будь-який вираз, результатом якого буде рядок або число:
const firstName = "first";
const lastName = "last";
const user = {
[`${firstName}Name`]: "Анна",
[`${lastName}Name`]: "Шевченко"
};
console.log(user);
// { firstName: "Анна", lastName: "Шевченко" }Обчислювані назви корисні, коли об’єкт створюється на основі даних, отриманих під час виконання програми.
Метод — це функція, яка є властивістю об’єкта.
До скороченого синтаксису методи записували так:
const user = {
name: "Олег",
sayHello: function () {
console.log("Привіт!");
}
};
user.sayHello();У сучасному JavaScript ключове слово function можна опустити:
const user = {
name: "Олег",
sayHello() {
console.log("Привіт!");
}
};
user.sayHello();Ці записи рівнозначні за призначенням:
const firstObject = {
greet: function () {
console.log("Привіт!");
}
};
const secondObject = {
greet() {
console.log("Привіт!");
}
};Методи можуть приймати параметри та повертати значення так само, як звичайні функції:
const calculator = {
add(a, b) {
return a + b;
},
multiply(a, b) {
return a * b;
}
};
console.log(calculator.add(2, 3)); // 5
console.log(calculator.multiply(4, 5)); // 20thisУсередині методу можна звернутися до інших властивостей цього самого об’єкта через this:
const user = {
firstName: "Олена",
lastName: "Коваль",
getFullName() {
return `${this.firstName} ${this.lastName}`;
}
};
console.log(user.getFullName());
// Олена КовальЗначення this у цьому прикладі — об’єкт user, оскільки метод викликається через user.getFullName().
Метод може змінювати властивості об’єкта:
const counter = {
value: 0,
increase() {
this.value += 1;
},
reset() {
this.value = 0;
}
};
counter.increase();
counter.increase();
console.log(counter.value); // 2
counter.reset();
console.log(counter.value); // 0Скорочені властивості, обчислювані назви та методи можна використовувати в одному об’єкті:
const title = "Курс JavaScript";
const duration = 12;
const actionName = "getInfo";
const course = {
title,
duration,
[actionName]() {
return `${this.title}: ${this.duration} уроків`;
}
};
console.log(course.title);
// Курс JavaScript
console.log(course.getInfo());
// Курс JavaScript: 12 уроківУ цьому прикладі:
title і duration — скорочені властивості;
[actionName] створює властивість із назвою getInfo;
getInfo() — скорочений запис методу;
this.title і this.duration звертаються до властивостей об’єкта course.
const productName = "Навушники";
const productPrice = 2500;
const methodName = "getDescription";
const product = {
name: productName,
price: productPrice,
available: true,
[methodName]() {
const status = this.available ? "є в наявності" : "немає в наявності";
return `${this.name} — ${this.price} грн, ${status}`;
},
applyDiscount(percent) {
this.price -= this.price * percent / 100;
}
};
console.log(product.getDescription());
// Навушники — 2500 грн, є в наявності
product.applyDiscount(10);
console.log(product.getDescription());
// Навушники — 2250 грн, є в наявностіУ цьому прикладі метод applyDiscount змінює значення властивості price, а метод getDescription використовує поточні значення властивостей об’єкта.
:Якщо назва властивості та змінна мають різні імена, скорочений запис використати не можна:
const userName = "Іван";
const user = {
name: userName
};
console.log(user.name);
// ІванЗапис name userName буде синтаксичною помилкою. Скорочення працює лише тоді, коли назва змінної збігається з назвою властивості:
const name = "Іван";
const user = {
name
};Якщо назва властивості зберігається у змінній, потрібні квадратні дужки:
const key = "color";
const item = {
[key]: "blue"
};
console.log(item.color);
// blueЗапис без дужок створить властивість із назвою key:
const key = "color";
const item = {
key: "blue"
};
console.log(item.key);
// blue
console.log(item.color);
// undefinedПосилання на метод і виклик методу — різні операції:
const user = {
greet() {
return "Привіт!";
}
};
console.log(user.greet);
// [Function: greet]
console.log(user.greet());
// Привіт!Дужки () потрібні, щоб виконати метод.
thisМетод правильно використовує this, коли викликається через об’єкт:
const user = {
name: "Софія",
greet() {
return `Привіт, я ${this.name}`;
}
};
console.log(user.greet());
// Привіт, я СофіяЯкщо окремо зберегти метод у змінній, він більше не викликається як метод user, тому контекст може бути втрачений:
const user = {
name: "Софія",
greet() {
return `Привіт, я ${this.name}`;
}
};
const greet = user.greet;
console.log(greet());
// У строгому режимі this буде undefinedНа початковому етапі викликайте методи через об’єкт: user.greet().
Створіть об’єкт book, використовуючи:
Змінні title, author і pages.
Скорочені властивості для цих змінних.
Метод getInfo(), який повертає назву книги, автора та кількість сторінок.
Змінну methodName зі значенням "isLong".
Обчислювану назву методу, який повертає true, якщо в книзі більше ніж 300 сторінок.
Приклад розв’язання:
const title = "Кобзар";
const author = "Тарас Шевченко";
const pages = 352;
const methodName = "isLong";
const book = {
title,
author,
pages,
getInfo() {
return `${this.title} — ${this.author}, ${this.pages} сторінок`;
},
[methodName]() {
return this.pages > 300;
}
};
console.log(book.getInfo());
// Кобзар — Тарас Шевченко, 352 сторінок
console.log(book.isLong());
// trueСкорочена властивість записується як name, якщо змінна також називається name.
Якщо назва властивості зберігається у змінній, використовують синтаксис [variable].
Обчислювані назви можуть містити шаблонні рядки та інші вирази.
Скорочений метод записується як methodName() { ... }.
Усередині методу властивості поточного об’єкта доступні через this.
Метод викликають із дужками: object.method().
Скорочений синтаксис робить код об’єктів компактнішим і зрозумілішим.