Показать сообщение отдельно
  #9 (permalink)  
Старый 06.06.2022, 22:19
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Сообщение от рони Посмотреть сообщение
а что это даёт? как использовать? можно пример?
Сообщение от рони Посмотреть сообщение
а что это даёт? как использовать? можно пример?
Можно целый трактат на эту тему написать
Во-первых поля класса (class fields - https://developer.mozilla.org/en-US/...nstance_fields) помогают читаемости кода. Ведь не обязательно все поля используются, инициализируются в конструкторе. Некоторые поля могут использоваться только в отдельных методах. А задание полей класса сразу показывает какие поля есть в классе. Какие в экземплярах класса, какие статические, какие приватные.
Во-вторых это гарантирует, что при создании экземпляра класса все поля будут создаваться в определенном порядке - том, который указан при задании полей.
Например
class C {
    constructor () {
       this.a = 0;
    }

    set X (v) {this.x = v}
    set Y (v) {this.y = v}
}

const o1 = new C();
o1.X = 2;
o1.Y = 3;

const o2 = new C();
o1.Y = 3;
o1.X = 2;

Мы получили
o1 = {a: 0, x:2, y:3}
o2 = {a:0, y:3, x:2}

С точки зрения самого js разницы особой нет.
Но с точки зрения всех js машин (и v8 хрома, и в файрфоксе, и в сафари) разница большая. Эти объекты имеют разную внутреннюю структуру и оптимизация работы с такими объектами невозможна.
А задание
class C {
    a;
    x;
    y;
    constructor () {
       this.a = 0;
    }

гарантирует, что все экземпляры класса будут иметь одинаковую структуру {a: x: y:}
Ответить с цитированием