Наследование от классов с закрытыми конструкторами
В большинстве языков программирования невозможно наследовать от класса, который имеет только закрытые конструкторы. Это происходит потому, что подкласс нуждается в вызове конструкторов родительского класса.
В JavaScript прямой поддержки приватных конструкторов нет, но существуют способы их имитации. Я наткнулся на интересный пример, связанный с HTMLVideoElement
. Этот класс вызывает ошибку Illegal constructor
, если попытаться создать его через new HTMLVideoElement()
.
class MyCustomVideo extends HTMLVideoElement {
constructor() {
super();
}
}
Тем не менее, когда я создаю подкласс, то могу сформировать его экземпляр с помощью new MyCustomVideo()
без ошибок. Это работает только после выполнения команды customElements.define('my-custom-video', MyCustomVideo, { extends: 'video'})
.
Если пропустить этот шаг, то конструктор снова вызовет исключение. Это поведение кажется наблюдаемым, и у меня есть вопросы: может ли такая функциональность измениться в будущем? Это желаемое поведение или особенность реализации разных браузеров?