Page 103 - 6108
P. 103

Нова  конструкція  class  –  зручний  «синтаксичний  цукор»  для  завдання
               конструктора разом з прототипом.
                     Функція  constructor  запускається  при  створенні  new  Person,  інші
               методи записуються в User.prototype.

                     class Person {
                            constructor (name, surname, age) {
                            this.name = name;
                            this.surname = surname;
                            this.age = age;
                     }
                     toString() {return `${this.name} ${this.surname} is
               ${this.age} years old.` }
                     }

                     Наслідування

                     class User extends Person {
                     constructor(name, surname, age, nickname) {
                      super(name, surname, age);
                      this.nickname = nickname;
                     }
                     toString() {return super.toString() + ` And has nickname:
               ${this.nickname}`}
                     }
                     Але при оголошенні через class є ряд відмінностей:
                     1) User не можна викликати без new, буде помилка.
                     2) Оголошення класу з точки зору області  видимості поводиться як  let.
               Зокрема, воно видно тільки в поточному блоці і тільки в коді, який знаходиться
               нижче оголошення (Function Declaration видно і до оголошення).
                     Методи, оголошені всередині class, також мають ряд особливостей:
                     1) Метод toString є саме методом, тобто має доступ до super.

                     2)  Всі  методи  класу  працюють  в  строгому  режимі  use  strict,  навіть
               якщо він не вказаний.
                     3) Всі методи класу не перелічувані. Тобто в циклі for…in по об'єкту їх не
               буде видно.

                     // геттер
                       get fullName() {
                         return `${this.firstName} ${this.lastName}`;
                       }
                       // сеттер
                       set fullName(newValue) {
                         [this.firstName, this.lastName] = newValue.split(' ');
                       }
                     user.fullName;
                     user.fullName = "Tom Smith";
                     При  читанні  fullName  буде  викликаний  метод  get  fullName(),  при

               присвоєнні – метод set fullName з новим значенням.
                     class не дозволяє задавати властивості-значення. У синтаксисі класів, як
               бачили вище, можна створювати методи. Вони будуть записані в прототип, як
   98   99   100   101   102   103   104   105   106   107   108