Сообщение от Начинающий-Js-кодер
|
а зачем в javascript часто разработчики используют вложенные классы?
|
Они, возможно, используют объемлющий класс просто как пространство имен. Или как способ представления данных.
Например, у вас есть класс Field описывающий какое-то абстрактное поле:
class Field {
constructor(width, length) {
this.width = width;
this.length = length;
}
}
У поля есть заданные и неизменяемые длина и ширина. Теперь у вам необходимо создать класс Point, описывающий какую-либо точку на поле, и вы думаете: точка на поле не отделима от поля, но точка в общем может использоваться ещё где-нибудь, так зачем же создавать глобальную сущность, которая бы не позволила вложить смысл, например, точке в пространстве? И правильно думаете. И делаете вложенный класс...
class Field {
constructor(width, length) {
this.width = width;
this.length = length;
}
}
Field.Point = class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
};
Вложенный класс - способ представления данных. У вас теперь логически один класс в иерархии относится к другому. Т.е. создание полей и точек теперь будет выглядеть так...
const field = new Field(400, 400);
const p = new Field.Point(25, 50);
Теперь все, кто увидят такую иерархию будут понимать, что Point используется вместе с Field.
Сообщение от Начинающий-Js-кодер
|
И все же в первом варианте у вас используются скобки, а я хотел бы добиться такого вызова: new X.Y
|
там, где написано new X() или new X.Y() можно сократить до new X или new X.Y соответственно.