Это старая версия документа!
Класи
Оголошення класу
class User {
// Тіло класу
}
Екземпляра класу
class User {
// Тіло класу
}
const mango = new User();
console.log(mango); // {}
const poly = new User();
console.log(poly); // {}
Конструктор класу
- Якщо метод конструктора (constructor) не визначити в явному вигляді, то буде створений конструктор за замовчуванням — порожня функція, яка не змінює екземпляр класу.
- Виклик класу з оператором new призводить до створення нового об'єкта й автоматичного виклику методу constructor
- Аргументи, які передаються при виклику new User(), стають значеннями параметрів для методу constructor.
- метод constructor викликається в контексті створюваного екземпляра.
class User {
constructor(name, email) {
console.log(name, email);
}
}
const mango = new User("Mango", "mango@mail.com"); // "Mango mango@mail.com"
console.log(mango); // {}
class User {
constructor({ name, email }) {
this.name = name;
this.email = email;
}
}
const mango = new User({
name: "Mango",
email: "mango@mail.com",
});
console.log(mango); // { name: "Mango", email: "mango@mail.com" }
Методи класу
це функції, які будуть доступні екземпляру в його прототипі. Вони оголошуються в довільному порядку після конструктора. На відміну від синтаксису методів об'єкта (вони розділяються комою), методи класу не розділені жодними спеціальними символами.
- Методи класу додаються до спеціального об'єкта, який зберігається у властивості prototype самого класу.
class User {
constructor({ name, email }) {
this.name = name;
this.email = email;
}
getEmail() {
return this.email;
}
changeEmail(newEmail) {
this.email = newEmail;
}
}
Приватні властивості
Додаючи до імені властивості на початку символ #, ми робимо її приватною. Оголошення приватної властивості до ініціалізації в конструкторі є обов'язковим.
class User {
// Необов'язкове оголошення публічних властивостей
name;
// Обов'язкове оголошення приватних властивостей
#email;
constructor({ name, email }) {
this.name = name;
this.#email = email;
}
}
const mango = new User({
name: "Mango",
email: "mango@mail.com",
});
console.log(mango.name); // "Mango"
console.log(mango.#email); // Виникне помилка, це приватна властивість
Приватні методи
class User {
name;
#email;
constructor({ name, email }) {
this.name = name;
this.#email = email;
}
// Публічний метод для отримання електронної пошти
getEmail() {
return this.#email;
}
// Публічний метод для зміни електронної пошти
changeEmail(newEmail) {
this.#email = newEmail;
}
}
const mango = new User({
name: "Mango",
email: "mango@mail.com",
});
console.log(mango.getEmail()); // "mango@mail.com"
mango.changeEmail("mango@supermail.com");
console.log(mango.getEmail()); // "mango@supermail.com"
Геттери і сеттери
це спеціальний синтаксис оголошення методів для взаємодії з властивостями. Геттер і сеттер імітують звичайну публічну властивість класу, але дозволяють взаємодіяти з іншими властивостями зручнішим способом.
class User {
#email;
constructor({ name, email }) {
this.name = name;
this.#email = email;
}
// Геттер email
get email() {
return this.#email;
}
// Сеттер email
set email(newEmail) {
this.#email = newEmail;
}
}