@ivan0512

Что не так с прототипным наследованием в js? Чем оно отличается от классического?

Я понимаю, как устроено наследование в js.
Однако часто слышу фразу, что раз оно прототипное, то что-то с ним не так.
А в чем на практике оно хуже классического немножественного наследования? Можно сравнить, например, с Java.
На первый взгляд суть одна и та же. Только в js, это свойство __proto__ можно так сказать пощупать, а в других языках это все происходит под капотом.
  • Вопрос задан
  • 132 просмотра
Пригласить эксперта
Ответы на вопрос 1
@t800zippygod
Именно из-за того, что свойство можно "пощупать", многие и не любят js.
Как все происходит при классическом наследовании: класс-родитель "рассказывает" своим детям как надо жить на этой планете и пускает инстансы(потомков) в свободное плавание. Он говорит детям: вот ребят, берите мои знания (свойства), мои умения (методы) и уходите, можете развивать мой опыт, добавлять новую функциональность. При этом дети САМОСТОЯТЕЛЬНЫ, они не зависят от маменьки.
В JS дети более капризные, и с ними больше проблем. Они говорят матери: так-так, зачем мне самому чему-то учиться, ведь я всегда могу придти к тебе и узнать то, что мне нужно (то есть обратиться через прототип). Конечно, можно им переписать родительские методы или свойства, но по дефолту они берут все у родителей через прототип. И тут начинаются проблемы: через какое-то время маменька захворала и переопределила половину методов (это, конечно, отвратительная практика). Приходит к ней сын и разочаровывается.

Я попытался на жизненном примере описать то, что происходит. Конечно, мелких нюансов много. На самом деле прототипное наследование дает даже бОльшую гибкость, чем классическое. Но где свобода творчества -- там велик шанс появления ошибок. И за это JS опасаются. Почему на Java строят архитектуру на миллионы строк ? -- потому что это строгий язык во всех отношениях, и ошибок из-за этого меньше.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы