0
 
добавлено 25.07.2019 в 23:31, источник Хабрахабр

Неожиданный порядок инициализации наследованных классов в JavaScript


Сегодня у меня была небольшая задачка на рефакторинг JS кода, и я натолкнулся на неожиданную особенность языка, о которой на протяжении 7 лет своего опыта программирования на этом ненавистном многими языке не задумывался и не сталкивался.
К тому же, я ничего не смог найти ни в русскоязычном, ни в английском интернете, в связи с чем решился опубликовать эту не очень длинную, не самую интересную, но полезную заметку.
Чтобы не пользоваться традиционными и бессмысленными константами foo/bar, покажу непосредственно на примере, который был у нас в проекте, но все же без кучи внутренней логики и с фейковыми значениями. Помните, что все равно примеры получились довольно синтетические
Наступаем на грабли
Итак, у нас есть класс:
class BaseTooltip { template = 'baseTemplate' constructor(content) { this.render(content) } render(content) { console.log('render:', content, this.template) } } const tooltip = new BaseTooltip('content') // render: content baseTemplate
Все логично
А потом нам понадобилось создать другой тип тултипов, в котором изменяется поле template
class SpecialTooltip extends BaseTooltip { template = 'otherTemplate' }
И вот тут меня ждал сюрприз, потому что при создании объекта нового типа происходит следующее
const specialTooltip = new SpecialTooltip('otherContent') // render: otherContent baseTemplate // ^ СТРАННО
Читать дальше →


Читать новость целиком


ФИО:
Пожалуйста, заполните поле. Не менее 3-х символов.
E-mail:
Пожалуйста, заполните поле. Не менее 3-х символов.
Компания:
Пожалуйста, заполните поле. Не менее 3-х символов.
Текст:
Пожалуйста, заполните поле. Не менее 3-х символов.
Отправить







Добавить комментарий
Вы не можете комментировать, пока не авторизуетесь вКонтакте, воспользовавшись кнопкой ниже.


Похожие новости
26.07.2019
"Игра хорошая, но без русского языка ставлю единицу" – частый отзывов в любом сторе. Учить английский, конечно, хорошо, но может помочь и локализация. Перевел статью, на какие языки ориент...
28.07.2019
Предлагаем вашему вниманию подборку с ссылками на новые материалы из области фронтенда и около него. Читать дальше →
28.07.2019
Предлагаем вашему вниманию подборку с ссылками на новые материалы из области фронтенда и около него. Читать дальше →
28.07.2019
Предлагаем вашему вниманию подборку с ссылками на новые материалы из области фронтенда и около него. Читать дальше →
28.07.2019
Предлагаем вашему вниманию подборку с ссылками на новые материалы из области фронтенда и около него. Читать дальше →