JavaScript

Зачем нужен prototype в JavaScript?

Зачем нужен prototype в JavaScript?

При создании любого объекта в JavaScript создается новый объект __proto__ в системе который ссылается на функцию (класс) с помощью которого этот объект создан.
При объявлении функции или класса создается также объект с именем prototype.
Он создается для того чтобы потомки функции-классы могли унаследовать его свойства или для того чтобы сделать чисто инициализацию конструктора, который создается когда объявляется любая функция или класс?
>> Зачем нужен prototype в JavaScript?
Так в JavaScript реализуют наследование. поищи в интернете определение слова "прототип"

>> При создании любого объекта в JavaScript создается новый объект __proto__ ...
Это выдуманная чушь никаких дополнительных объектов не создается.

>> При объявлении функции или класса создается также объект prototype ...
Такая же чушь.

__proto__ это ссылка на уже созданный ранее отдельный объект.
к примеру Object это один отдельный объект и все его потомки просто на него ссылаются. Соответственно изменив этот объект ты сразу же изменяешь всех его потомков

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

В компилируемых языках методы и свойства конструируются полностью и сразу конструктором.
В JavaScript используются разветвленная древовидная структура живых прототипов
их в любой момент можно изменять и это сразу же отразится на потомках что позволяет на полную катушку использовать метопрограммирование.
Сергей Васильевич
Сергей Васильевич
12 592
Лучший ответ
Санёк Афанасьев При объявлении функции, у нее автоматически создается свойство prototype, свойство prototype должно быть у какого-то объекта, правильно? Какого объекта?

Зачем создается свойство prototype в движке Javascript? Какая основная цель создания свойства prototype? Для того чтобы инициализировать конструктор когда создам объект?
Санёк Афанасьев prototype также придуман чтобы инициализировать конструктор перед созданием объекта?
Санёк Афанасьев После того как я через new создам объект произойдет инициализация конструктора, но само создание конструктора происходит после объявлении функции или класса?
Санёк Афанасьев Ссылка - это __proto__ а prototype - это ведь не ссылка
Санёк Афанасьев Это скрытые свойства самого движка Javascript или скрытые свойства объекта Object? Ведь свойства __proto__ и prototype имеет какой-то объект. Какой объект имеет эти свойства?