klasi

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
klasi [2023/11/21 19:28]
tro
klasi [2023/11/21 19:43] (текущий)
tro
Строка 129: Строка 129:
  
 console.log(MyClass.myProp); // "value" console.log(MyClass.myProp); // "value"
 +</code>
 +===== Статичні методи =====
 +У класі можна оголосити не тільки методи майбутнього екземпляра, а й статичні методи. Статичні методи — це методи, доступні тільки класу. Вони можуть бути публічні та приватні.
 +<code>
 +class User {
 +  static #takenEmails = [];
 +
 +  static isEmailTaken(email) {
 +    return User.#takenEmails.includes(email);
 +  }
 +
 +  #email;
 +
 +  constructor({ email }) {
 +    this.#email = email;
 +    User.#takenEmails.push(email);
 +  }
 +}
 +
 +const mango = new User({ email: "mango@mail.com" });
 +
 +console.log(User.isEmailTaken("poly@mail.com")); // false
 +console.log(User.isEmailTaken("mango@mail.com")); // true
 </code> </code>
 ===== Геттери і сеттери ===== ===== Геттери і сеттери =====
Строка 169: Строка 192:
 console.log(mango.email); // mango@supermail.com console.log(mango.email); // mango@supermail.com
 </code> </code>
 +===== Наслідування класів =====
 +**extends** дозволяє реалізувати наслідування класів, коли один клас (дочірній, похідний) наслідує властивості й методи іншого класу (батьківського).
 +<code>
 +class Parent {}
 +
 +class Child extends Parent {
 +  // ...
 +}
 +</code>
 +===== Конструктор дочірнього класу =====
 +super(args) — це псевдонім конструктора батьківського класу.
 +<code>
 +class User {
 +  #email;
 +
 +  constructor(email) {
 +    this.#email = email;
 +  }
 +
 +  get email() {
 +    return this.#email;
 +  }
 +
 +  set email(newEmail) {
 +    this.#email = newEmail;
 +  }
 +}
 +
 +class ContentEditor extends User {
 +  constructor({ email, posts }) {
 +    super(email); // Виклик конструктора батьківського класу User
 +    this.posts = posts;
 +  }
 +}
 +
 +const editor = new ContentEditor({ 
 + email: "mango@mail.com", 
 + posts: [] 
 +});
 +console.log(editor); // { #email: "mango@mail.com", posts: [] }
 +console.log(editor.email); // "mango@mail.com"
 +</code>
 +===== Методи дочірнього класу =====
 +Дочірній клас може використовувати методи та властивості батьківського класу. Крім цього, у дочірньому класі можна оголошувати методи, які будуть доступні тільки його екземплярам.
 +<code>
 +// Уявімо, що вище є оголошення класу User
 +
 +class ContentEditor extends User {
 +  constructor({ email, posts }) {
 +    super(email);
 +    this.posts = posts;
 +  }
 +
 +  addPost(post) {
 +    this.posts.push(post);
 +  }
 +}
 +
 +const editor = new ContentEditor({ 
 + email: "mango@mail.com", 
 + posts: [] 
 +});
 +
 +console.log(editor); // { #email: "mango@mail.com", posts: [], addPost: f }
 +
 +editor.addPost("post-1");
 +editor.addPost("post-2");
 +console.log(editor.posts); // ['post-1', 'post-2']
 +</code>
 +У прикладі бачимо, що ContentEditor успадковує клас User.
 +
 +  * User — це базовий клас, який має приватну властивість #email.
 +  * ContentEditor розширює клас User і має власну властивість posts. Клас ContentEditor також має метод addPost, який дозволяє додавати нові повідомлення до posts.
  • /sites/data/attic/klasi.1700594904.txt.gz
  • Последнее изменение: 2023/11/21 19:28
  • tro