Можно ли вызвать super() без аргументов? JS
У меня есть класс который инициализирует popUp:
class PopUp {
constructor() {
// popUp
this.container = document.querySelector('.popup');
// forms
this.popUpForm = document.querySelector('.popup__content');
this.form = document.querySelector('.popup__form');
this.inputName = document.querySelector('.popup__input_type_name');
this.inputAbout = document.querySelector('.popup__input_type_about');
this.popUpTitle = document.querySelector('.popup__title');
this.popUpButton = document.querySelector('.popup__button');
this.submit = document.getElementById('submit');
// closeButton
this.closeButton = document.querySelector('.popup__close');
// добавляю EventListener
this.setEventListener();
}
От него строятся 2 формы одна для редактирования профиля, другая для добавления картинок на страницу (да немного заморочено но так вышло)
вот пример:
class PopupCard extends PopUp {
constructor() {
super();
}
open() {
// этот метод создает форму "Новое место"
this.container.classList.add('popup_is-opened');
this.popUpButton.classList.add('popup__button_content');
// так как шаблон формы однин, add я сбрасываю
this.form.reset();
// специализация формы
this.popUpTitle.textContent = 'Новое место';
this.inputName.placeholder = 'Название';
this.inputAbout.placeholder = 'Ссылка на картинку';
this.popUpButton.textContent = '+';
// атрибуты проверки валидности формы
this.inputName.setAttribute('minlength', '2');
this.inputName.setAttribute('maxlength', '30');
this.inputAbout.setAttribute('type', 'url');
// атрибут name
this.addAttr(event);
}
}
class PopupProfile extends PopUp {
constructor() {
super();
}
open() {
// этот метод создает форму "Редактировать профиль"
this.container.classList.add('popup_is-opened');
this.popUpButton.classList.add('popup__button_edit');
this.popUpButton.classList.add('popup__button_valid');
// специализация формы
this.popUpTitle.textContent = 'Редактировать профиль';
this.inputName.placeholder = 'Имя';
this.inputAbout.placeholder = 'О себе';
this.popUpButton.textContent = 'Сохранить';
// задаю input начения по умолчанию
userInfo.setUserInfo();
// атрибуты проверки валидности формы
this.inputName.setAttribute('minlength', '2');
this.inputName.setAttribute('maxlength', '30');
this.inputAbout.setAttribute('minlength', '2');
this.inputAbout.setAttribute('maxlength', '30');
// атрибут name
this.addAttr(event);
}
}
Вопрос: можно ли так использовать super() или ему обязательно нужно передать аргументы?
class PopupCard extends PopUp {
constructor() {
super();
}
}
Ответы (1 шт):
Во-первых, если функция/метод/конструктор объявлены без параметров и не ожидают никаких параметров, то их и надо вызывать без параметров.
Во-вторых, в JavaScript любая функция может быть вызвана без параметров. И уже от самой функции зависит, как она с этим справится.
И в-третьих - от @AlexeyTen, если единственное, что делает конструктор, это вызывает super, никак не изменяя параметры, то его (конструктор) можно просто не писать.