Как грамотно организовать JS код в ООП стиле разнесенный по файлам? Не могу до конца понять структуру того, как должен действовать ООП код, чтобы получать доступ к родительским свойствам конструктора. При этом не ясно, где создавать и вызывать объекты.
Допустим у меня есть два класса, это `app` - мой главный класс, `map` - класс с картой, который дочерний класса `app`
Я имею следующий код класса `app`class App {
constructor() {
this.app = document.querySelector('#city');
}
init() {
}
}
const app = new App();
app.init();
export default function () {
return App;
}
Отсюда я экспортирую весь класс целиком, чтобы получить доступ к его конструктору в другом файле. Код представлен нижеimport App from '../index.js'; //забираю мой класс
class Map extends App {
constructor() {
super();
console.log(this.app); //здесь почему то приходит undefined??
}

// ... my metods
}
Вопрос в том почему `undefined`? И второй вопрос, где нужно создавать объект от класса `map`. То есть мне нужно эскпортировать класс и в родительском потом создавать объект, и обращаться к методам? или как-то по-другому? При этом нужно учесть что у класса `map` будут тоже подклассы.
Я буду очень благодарен, если кто-то скинет пример. Или хотя бы ссылочку на грамотно организованный код, чтобы посмотреть.

21 Авг 2019 в 07:00
157 +1
0
Ответы
1

Давайте разберем ваш код и внесем необходимые изменения для корректной работы согласно принципам ООП.

В классе App у вас сейчас неправильное использование super() в конструкторе класса Map. Правильный способ вызова конструктора родительского класса с использованием super() выглядит так:super();В классе App у вас нужно создать объект класса Map и вызвать методы этого объекта из метода init(). Таким образом, у вас должно получиться что-то вроде:import Map from './Map.js'; //подключаем класс Map
class App {
constructor() {
this.app = document.querySelector('#city');
this.map = new Map(); // создаем объект класса Map
}
init() {
this.map.someMethod(); // вызываем метод класса Map
}
}
const app = new App();
app.init();
export default App;В классе Map у вас также нужно правильно передавать параметры родительского класса через super(). Также, следует создать объекты подклассов внутри конструктора класса Map, если это необходимо.import App from './App.js';
class Map extends App {
constructor() {
super();
console.log(this.app); // здесь должен быть корректный доступ к свойству родительского класса
this.subMap = new SubMap(); // создаем объект подкласса
}
someMethod() {
// ... код метода
}
}
export default Map;

Таким образом, у вас должна получиться правильная организация классов с учетом наследования и вызовов методов. Надеюсь, это поможет вам разобраться с ООП структурой вашего кода. Если у вас остались вопросы - обращайтесь!

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 96 091 автору
Первые отклики появятся уже в течение 10 минут
Прямой эфир