от класса A
2) в конструкторе А в конце вызывается метод render(), который работает с аргументами конструктора и строит DOM
3) в конструкторе B я естественно сначала вызываю super(), что подразумеает и вызов render() предка
но проблема в том, что у меня у B в конструктор передаются новые параметры, которых нет у предка, и их тоже нужно использовать в render, а он то уже вызван из предка без этих новых параметров
как быть?
если речь про что-то типа реакта, то пользуйся не наследованием, а композицией
нет, чистый js боюсь, что композицию использовать не получится, так как это наследование компонентов дропдаун -> дропдаун-селект
render(oldProps, newProps){ super.render(oldProps); useNewProps(newProps); }
тогда один общий предок для двух классов, который будет всё, кроме рендера делать
переопределить метод render() в классе B, чтобы он учитывал новые параметры, которые были добавлены в конструкторе класса B.
class A { constructor(commonParam) { this.commonParam = commonParam; this.render(); } render() { } } class B extends A { constructor(commonParam, newParam) { super(commonParam); this.newParam = newParam; } render() { super.render(); } } const bInstance = new B("commonValue", "newValue"); что то типа такого?
super(commonParam); здесь уже вызывается render() предка без учета нового параметра в конструкторе потомка а без него render() для потомка не имеет смысла то есть в render() выполняются вещи, которые требуют для B наличия этого нового параметра
Родительские классы ничего не должны знать о классах потомков
так он и не знает родительский класс в render использует уже существующую разметку, меняет ее, проверяет на переполнение контейнеры, принимает опции типа позиционирования и вида анимаций открытия а в дочернем классе на момент запуска родительского render() нет нужной разметки она формируется в его экземпляре метода render видимо нужно действительно добавить общего предка наверх
кинь код, так проще будет решить или залей куда-нибудь
Обсуждают сегодня