Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 14.01.2019, 21:58
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 542

Сообщение от Начинающий-Js-кодер
то есть имя метода совпадает с именем функции этого метода.
На самом деле это статический вложенный класс. Обычно класс называют с большой буквы, а метод с маленькой, иначе можно перепутать статический вложенный класс со статическим методом класса.
Сообщение от Начинающий-Js-кодер
То есть в javascript нет возможности при исполнении такой строки new MyClass.Module1 вызвать именно конструктор new MyClass.Module1 а не MyClass и его метод Module1?
Вот пример статического вложенного класса и статического метода и их всевозможных вызовов... вызовы происходят в порядке чисел alert
function X() {alert(1)}
X.prototype = {
	y: function() {alert(2)}
};
X.y = function() {alert(3)};

X.Y = function Y() {alert(4)}
X.Y.prototype = {
	y: function() {alert(5)}
};
X.Y.y = function() {alert(6)};

new X(); // или new X
new X().y();
X.y();
new X.Y(); // или new X.Y
new X.Y().y();
X.Y.y();


Вот тоже самое, но только с синтаксисом класса... Здесь трудно перепутать вложенный класс со статичным методом класса.
class X {
	constructor(){alert(1)}
	y(){alert(2)}
	static y(){alert(3)}
}

X.Y = class Y {
	constructor(){alert(4)}
	y(){alert(5)}
	static y(){alert(6)}
};

new X(); // или new X
new X().y();
X.y();
new X.Y(); // или new X.Y
new X.Y().y();
X.Y.y();


Синтаксис класса является более предпочтительным в языке программирования JavaScript.

Последний раз редактировалось Malleys, 14.01.2019 в 22:57.
Ответить с цитированием
  #12 (permalink)  
Старый 14.01.2019, 22:07
Кандидат Javascript-наук
Отправить личное сообщение для Начинающий-Js-кодер Посмотреть профиль Найти все сообщения от Начинающий-Js-кодер
 
Регистрация: 12.06.2016
Сообщений: 120

Спасибо за оба примера. Мне по душе 1 вариант написания. Но я так и не понял, а зачем в javascript часто разработчики используют вложенные классы?
И все же в первом варианте у вас используются скобки, а я хотел бы добиться такого вызова: new X.Y;
Ответить с цитированием
  #13 (permalink)  
Старый 14.01.2019, 22:13
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 542

Сообщение от Начинающий-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.
Ответить с цитированием
  #14 (permalink)  
Старый 14.01.2019, 22:24
Кандидат Javascript-наук
Отправить личное сообщение для Начинающий-Js-кодер Посмотреть профиль Найти все сообщения от Начинающий-Js-кодер
 
Регистрация: 12.06.2016
Сообщений: 120

Понял теперь. А есть книги в которых об этом пишут? О том как организовывать большие классы, как их правильно структурировать и прочее?
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объяснение работы функции в js. Neor Общие вопросы Javascript 2 03.05.2018 00:14
Как заставить JS обрабатывать функции для всех блоков с заданным классом? GTX14 Общие вопросы Javascript 1 04.04.2015 17:12
JS на ARM. Нет функции SergNF Общие вопросы Javascript 0 26.02.2013 09:47
Переменная php -> параметр функции JS allie Общие вопросы Javascript 3 30.09.2011 10:11
Запуск при редиректе некой js функции Dorsaj Элементы интерфейса 0 22.10.2010 16:05