Как грамотно организовать 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
174 +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
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир