Показать сообщение отдельно
  #13 (permalink)  
Старый 14.01.2019, 22:13
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от Начинающий-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 соответственно.

Последний раз редактировалось Malleys, 14.01.2019 в 22:53.
Ответить с цитированием