Прототип наследования является формой объектно-ориентированного повторного использования кода . Javascript - один из единственных [основных] объектно-ориентированных языков, использующих наследование прототипов. Почти все другие объектно-ориентированные языки являются классическими.
В классическом наследовании программист пишет класс, который определяет объект. Несколько объектов могут быть созданы из одного и того же класса, поэтому у вас есть код в одном месте, который описывает несколько объектов в вашей программе. Классы могут быть организованы в иерархию, что способствует повторному использованию кода. Более общий код хранится в классе более высокого уровня, от которого наследуются классы более низкого уровня. Это означает, что объект совместно использует код с другими объектами того же класса, а также со своими родительскими классами.
В форме прототипного наследования объекты наследуются непосредственно от других объектов. Все дела о занятиях уходят. Если вы хотите объект, вы просто пишете объект. Но повторное использование кода по-прежнему ценно, поэтому объектам разрешено связывать их вместе в иерархии. В javascript каждый объект имеет секретную ссылку на объект, который его создал, образуя цепочку. Когда у объекта запрашивается свойство, которого у него нет, его родительский объект будет запрашиваться ... непрерывно вверх по цепочке, пока свойство не будет найдено или пока не будет достигнут корневой объект.
Каждая функция в JavaScript (которые сами являются объектами) на самом деле имеет член с именем «prototype», который отвечает за предоставление значений при запросе у них объекта. Наличие этого члена позволяет механизму конструктора (с помощью которого объекты создаются из функций) работать. Добавление свойства к прототипу функционального объекта сделает его доступным для созданного объекта, а также для всех объектов, которые его наследуют.
Преимущества
Не может быть жесткого и быстрого правила относительно того, почему наследование прототипов является выгодной формой повторного использования кода. Повторное использование кода выгодно, и наследование прототипов - разумный способ добиться этого. Вы можете возразить, что наследование прототипа - это довольно простая модель повторного использования кода, и этот код можно интенсивно использовать прямым способом . Но классические языки, безусловно, способны достичь этого.
Sidenote: @ Эндрю Хеджес отмечает, что на самом деле существует много прототипных языков. Стоит отметить, что эти другие существуют, но также стоит отметить, что ни один из них не имеет ничего общего с мейнстримом. NewtonScript, казалось, какое-то время набирал обороты, но умер с его платформой. Также возможно расширить некоторые современные языки способами, которые добавляют возможности прототипа.