Что значит, что Javascript - это прототип языка?

Одним из основных преимуществ Javascript является то, что он основан на прототипе.

Но что это значит, что Javascript основан на прототипе и почему это преимущество?

Ответ 1

Прототипное наследование - это форма объектно-ориентированного повторного использования кода. Javascript является одним из единственных [основных] объектно-ориентированных языков для использования прототипального наследования. Почти все другие объектно-ориентированные языки классические.

В классическом наследовании программист пишет класс, который определяет объект. Несколько объектов могут быть созданы из одного класса, поэтому у вас есть код в одном месте, который описывает несколько объектов в вашей программе. Затем классы могут быть организованы в иерархию, что способствует повторному использованию кода. Более общий код хранится в классе более высокого уровня, из которого наследуются классы более низкого уровня. Это означает, что объект использует код с другими объектами того же класса, а также с его родительскими классами.

В форме prototypal inheritance объекты наследуют напрямую от других объектов. Все дело о занятиях уходит. Если вы хотите объект, вы просто пишете объект. Но повторное использование кода по-прежнему ценно, поэтому объекты могут быть связаны друг с другом в иерархии. В javascript каждый объект имеет секретную ссылку на объект, который его создал, образуя цепочку. Когда объект запрашивается для свойства, которого у него нет, его родительский объект будет задан... постоянно вверх по цепочке до тех пор, пока свойство не будет найдено или пока не будет достигнут корневой объект.

Каждая функция в JavaScript (которая является самими объектами) на самом деле имеет член с именем "prototype", который отвечает за предоставление значений, когда объект запрашивается у них. Наличие этого элемента позволяет работать с конструкторским механизмом (по которому объекты строятся из функций). Добавление свойства в прототип объекта функции сделает его доступным для сконструированного объекта, а также для всех объектов, которые наследуются от него.

<сильные > Преимущества

Не может быть жесткого и быстрого правила относительно того, почему прототипное наследование является преимущественной формой повторного использования кода. Само использование кода является преимущественным, и прототипное наследование - разумный способ обойти его. Вы можете утверждать, что прототипное наследование является довольно простой моделью повторного использования кода, и этот код может быть сильно использован в прямых путях. Но классические языки, конечно, тоже могут это сделать.

Sidenote: @Andrew Hedges делает хорошую мысль, что на самом деле много прототипов. Стоит отметить, что эти другие существуют, но также стоит отметить, что ни один из них не является чем-то близким к мейнстриму. У NewtonScript некоторое время было какое-то тяговое усилие, но он умер со своей платформой. Также возможно расширить некоторые современные языки способами, которые добавляют прототипные возможности.

Ответ 2

Язык, основанный на прототипе, не делает различия между классами и объектами: он просто имеет объекты. Язык, основанный на прототипе, имеет понятие прототипического объекта, объект, используемый в качестве шаблона, из которого можно получить начальные свойства для нового объекта. Любой объект может определять свои собственные свойства либо при его создании, либо во время выполнения. Кроме того, любой объект может быть связан как прототип для другого объекта, позволяя второму объекту совместно использовать первые свойства объекта.

Ответ 3

Программирование на основе прототипа - это стиль объектно-ориентированного программирования, где классов нет, а повторное использование поведения (или наследование в языках на основе классов) выполняется путем клонирования существующих объектов, которые служат прототипами.

Ответ 4

Преимущество/недостаток заключается в том, что во время выполнения мы можем создавать новые типы объектов без необходимости определять классы (статический код). Как и большинство функций, разработчик может превратить его в преимущество/недостаток.

Выше возможно, потому что объекты по существу являются функциями в java script (закрытие тоже).

Ответ 5

Вместо объявления структуры класса вы можете создавать объекты того же типа и добавлять их определение в любое время, когда захотите использовать прототип объекта. Это более гибко, чем обычный способ делать вещи.

Ответ 6

Если вы просто используете объекты во время выполнения вместо класса при компиляции для создания новых объектов, это открывает возможность расширения объекта, не зная никаких подробностей об этом. Конечно, это может стать недостатком довольно быстро в зависимости от использования. Я не делаю никаких предположений о языке здесь, поэтому он применим к языкам, отличным от javascript, которые не являются динамическими.

myobject.prototype=unkownobject;
myobject.newproperty=1;

Вы можете получить объект от где угодно; ваш собственный код, из сети, из базы данных, из внешней связи и т.д.

Обратите внимание, что языку не нужно реализовывать наследование прототипа, например javascript. В javascript объект-прототип просто разделяется, как и его свойства, среди наследников. Альтернативой является копирование всех свойств прототипа в новый объект. Каждый подход имеет свои сильные стороны в разных ситуациях. Мне нравится второй, но это не то, что делает javascript.

Ответ 7

После прочтения всех ответов это заключение

1) Наследование, в котором объекты наследуются непосредственно от других объектов

2) Это не использует классы

3) Также называется программированием на основе экземпляров или бесклассовым прототипом ориентированного программирования

4) Повторное использование поведения выполняется путем клонирования существующих объектов, которые служат прототипами

5) Объект, используемый в качестве шаблона из нового объекта, получает начальные свойства

Ответ 8

JavaScript - это язык программирования на основе прототипа (вероятно, язык сценариев на основе прототипов является более правильным определением). Он использует клонирование, а не наследование. Язык программирования на основе прототипа - это стиль объектно-ориентированного программирования, который использует функции как конструкторы для классов. Хотя Javascript имеет класс ключевых слов, он не имеет инструкции класса. Это различие важно при сравнении JavaScript с другими языками ООП.