В JavaScript каждый объект является одновременно экземпляром и классом. Чтобы сделать наследование, вы можете использовать любой экземпляр объекта в качестве прототипа.
В Python, С++ и т.д. существуют классы и экземпляры как отдельные понятия. Чтобы сделать наследование, вы должны использовать базовый класс для создания нового класса, который затем может использоваться для создания производных экземпляров.
Почему JavaScript идет в этом направлении (ориентация объектов на основе прототипов)? каковы преимущества (и недостатки) основанного на прототипе ОО в отношении традиционных, основанных на классе ОО?