Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
klasi [2023/11/21 19:22] tro [Геттери і сеттери] |
klasi [2023/11/21 19:43] (текущий) tro |
||
|---|---|---|---|
| Строка 120: | Строка 120: | ||
| mango.changeEmail(" | mango.changeEmail(" | ||
| console.log(mango.getEmail()); | console.log(mango.getEmail()); | ||
| + | </ | ||
| + | ===== Статичні властивості ===== | ||
| + | Властивості, | ||
| + | < | ||
| + | class MyClass { | ||
| + | static myProp = " | ||
| + | } | ||
| + | |||
| + | console.log(MyClass.myProp); | ||
| + | </ | ||
| + | ===== Статичні методи ===== | ||
| + | У класі можна оголосити не тільки методи майбутнього екземпляра, | ||
| + | < | ||
| + | class User { | ||
| + | static # | ||
| + | |||
| + | static isEmailTaken(email) { | ||
| + | return User.# | ||
| + | } | ||
| + | |||
| + | #email; | ||
| + | |||
| + | constructor({ email }) { | ||
| + | this.#email = email; | ||
| + | User.# | ||
| + | } | ||
| + | } | ||
| + | |||
| + | const mango = new User({ email: " | ||
| + | |||
| + | console.log(User.isEmailTaken(" | ||
| + | console.log(User.isEmailTaken(" | ||
| </ | </ | ||
| ===== Геттери і сеттери ===== | ===== Геттери і сеттери ===== | ||
| * Элемент ненумерованного спискаце спеціальний синтаксис оголошення методів для взаємодії з властивостями. Геттер і сеттер імітують звичайну публічну властивість класу, але дозволяють взаємодіяти з іншими властивостями зручнішим способом. | * Элемент ненумерованного спискаце спеціальний синтаксис оголошення методів для взаємодії з властивостями. Геттер і сеттер імітують звичайну публічну властивість класу, але дозволяють взаємодіяти з іншими властивостями зручнішим способом. | ||
| + | * Перевага в тому, що це методи. Отже, під час запису або читання можна виконати додатковий код з будь-якими перевірками, | ||
| * Геттер і сеттер повинні називатися однаково. | * Геттер і сеттер повинні називатися однаково. | ||
| Краще називати геттери і сеттери так само, як і властивість, | Краще називати геттери і сеттери так само, як і властивість, | ||
| Строка 145: | Строка 178: | ||
| } | } | ||
| </ | </ | ||
| + | * Звертаючись до mango.email, | ||
| + | * При спробі запису mango.email = " | ||
| + | < | ||
| + | const mango = new User({ | ||
| + | name: " | ||
| + | email: " | ||
| + | }); | ||
| + | |||
| + | console.log(mango.email); | ||
| + | |||
| + | mango.email = " | ||
| + | |||
| + | console.log(mango.email); | ||
| + | </ | ||
| + | ===== Наслідування класів ===== | ||
| + | **extends** дозволяє реалізувати наслідування класів, | ||
| + | < | ||
| + | class Parent {} | ||
| + | |||
| + | class Child extends Parent { | ||
| + | // ... | ||
| + | } | ||
| + | </ | ||
| + | ===== Конструктор дочірнього класу ===== | ||
| + | super(args) — це псевдонім конструктора батьківського класу. | ||
| + | < | ||
| + | class User { | ||
| + | #email; | ||
| + | |||
| + | constructor(email) { | ||
| + | this.#email = email; | ||
| + | } | ||
| + | |||
| + | get email() { | ||
| + | return this.# | ||
| + | } | ||
| + | |||
| + | set email(newEmail) { | ||
| + | this.#email = newEmail; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | class ContentEditor extends User { | ||
| + | constructor({ email, posts }) { | ||
| + | super(email); | ||
| + | this.posts = posts; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | const editor = new ContentEditor({ | ||
| + | email: " | ||
| + | posts: [] | ||
| + | }); | ||
| + | console.log(editor); | ||
| + | console.log(editor.email); | ||
| + | </ | ||
| + | ===== Методи дочірнього класу ===== | ||
| + | Дочірній клас може використовувати методи та властивості батьківського класу. Крім цього, у дочірньому класі можна оголошувати методи, | ||
| + | < | ||
| + | // Уявімо, | ||
| + | |||
| + | class ContentEditor extends User { | ||
| + | constructor({ email, posts }) { | ||
| + | super(email); | ||
| + | this.posts = posts; | ||
| + | } | ||
| + | |||
| + | addPost(post) { | ||
| + | this.posts.push(post); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | const editor = new ContentEditor({ | ||
| + | email: " | ||
| + | posts: [] | ||
| + | }); | ||
| + | |||
| + | console.log(editor); | ||
| + | |||
| + | editor.addPost(" | ||
| + | editor.addPost(" | ||
| + | console.log(editor.posts); | ||
| + | </ | ||
| + | У прикладі бачимо, | ||
| + | * User — це базовий клас, який має приватну властивість #email. | ||
| + | * ContentEditor розширює клас User і має власну властивість posts. Клас ContentEditor також має метод addPost, який дозволяє додавати нові повідомлення до posts. | ||