Это ошибка для JavaScript extends
?
Нет, она работает точно так, как задумано.
Так где же на самом деле класс B
найти его унаследованное propA
свойство?Через какую часть цепочки прототипов?
Давайте сначала выясним две вещи:
- Функции - это объекты, из которых следует, что у них есть прототип.По умолчанию это
Function.prototype
, где определяются такие методы, как .call
и .apply
. - "Статические члены" - это просто свойства объекта функции
При выполнении
class B extends A {}
затем создается новый функциональный объект для B
, который в качестве прототипа имеет значение A
, а не Function.prototype
, и, следовательно, все свойства A
доступны через B
.
Мы легко можем это проверить:
class A {}
class B extends A {}
console.log(Object.getPrototypeOf(B) === A);