Сообщение от рони
|
а что это даёт? как использовать? можно пример?
|
Сообщение от рони
|
а что это даёт? как использовать? можно пример?
|
Можно целый трактат на эту тему написать
Во-первых поля класса (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:}