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 не дозволяє задавати властивості-значення. У синтаксисі класів, як
бачили вище, можна створювати методи. Вони будуть записані в прототип, як