В чем разница между классовым и прототипным наследованием

Ответ

Классовое наследование использует классы как шаблоны для создания объектов. Наследование происходит через цепочку классов (extends). В JS это синтаксический сахар над прототипами.

Прототипное наследование - объекты наследуют напрямую от других объектов через свойство __proto__. Каждый объект имеет скрытую ссылку на прототип.

Пример классового:

class Parent {
  greet() { return 'Hi' }
}
class Child extends Parent {}

Пример прототипного:

const parent = { greet: () => 'Hi' };
const child = Object.create(parent);

Ключевые отличия:

  1. В классах наследование декларативное, в прототипах - динамическое
  2. Классы имеют конструктор, статические методы
  3. Прототипы гибче - можно менять цепочку наследования в runtime