Привет Мир 🌏

Прототип — одна из самых важных концепций в JavaScript, и в большинстве случаев интервьюер задает этот вопрос.

Чтобы понять прототипы, нам нужно понять несколько ключевых понятий.
Давайте рассмотрим следующий фрагмент кода:

как вы думаете, что будет напечатано в консоли? Да, вы правы, Krishna будет напечатано в консоли.

Теперь рассмотрим этот фрагмент кода:

В приведенном выше коде я пытаюсь утешить ключ, которого нет в объекте. Угадайте, что будет напечатано в консоли?

.

.

Да, вы правильно догадались 😃, в консоли будет напечатано undefined. Это поведение javascript по умолчанию: если ключ не существует в объекте, его значение будет автоматически undefined.

Что, если я скажу, что все еще возможно иметь значение, соответствующее ключу weapon? Как ? Давайте исследовать 🗺️ вместе…..

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

Рассмотрим следующий фрагмент кода:

Хммм…. Все стало интереснее. Можете ли вы угадать, что будет зарегистрировано в консоли?

.

.

.
Да, может быть, вы догадались. В консоли будет зарегистрировано Chakra. Теперь давайте разберемся, как произошло это волшебство?

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

Давайте посмотрим еще один фрагмент кода:

Использование __proto__ не ограничивается одним объектом. Используя его, мы можем указать движку JS искать ключ для n количества объектов. И объект должен быть подключен с помощью ключа __proto__, образуя цепочку. Этот процесс посещения объектов известен как цепочка prototype. (Примечание: в отличие от цепи, которую мы носим, ​​прототипы цепей не могут быть круглыми)

Это можно понять по аналогии, что Арджун знает Бхима, Бхим знает Накула, а Накул знает Сахдева.

__proto__ представляет концепцию JavaScript прототипа. Любой объект JavaScript может выбрать любой другой объект в качестве прототипа. __proto__ можно считать создателем объекта.

Давайте рассмотрим интересное поведение __proto__.

Затенение

Затенение относится к поведению, когда объект __proto__ и сам текущий объект имеют один и тот же ключ. В этом случае приоритет отдается ключу объекта вместо ключа __proto__.

И мы можем проверить, владеет ли объект ключом, используя hasOwnProperty. hasOwnProperty не просматривая прототипы.

Прототип объекта

Рассмотрим следующий фрагмент кода:

У этого объекта нет прототипа, верно? Давайте утешим это.
.

.

.

Удивительно, но obj.__proto__ не null и не undefined!

В JS у каждого объекта есть свойство __proto__, которое представляет его создателя.

1. По этой причине мы можем напрямую использовать .toString .hasOwnProperty вместе с другими методами.

2. Именно по этой причине в JS (ES6) появилась концепция Map. Потому что в JS нет структуры данных, которую мы могли бы использовать для простого хранения данных в паре ключ-значение. Конечно, мы можем установить __proto__ для объекта равным null, но это не лучший способ добиться функциональности карты.

До сих пор у нас было достаточно информации о __proto__, теперь давайте посмотрим, что такое свойство prototype в функциях?

Прототип — это не особая «вещь» в JavaScript. Прототип больше похож на отношение. Объект может указывать на другой объект как на свой прототип.

Чтобы было понятно, давайте вернемся на несколько лет назад, когда у нас еще не было концепции классов в JavaScript. В то время разработчики обычно использовали функции для создания объектов:

Предположим, мы создали несколько объектов God и хотим использовать общий метод для всех них. В этом случае мы должны вручную применить функцию к объекту __proto__. Что выглядит не очень хорошо, когда у нас много объектов.

Теперь на помощь приходит prototype. Использование свойства prototype — это двухэтапный процесс.

  1. Вместо того, чтобы прикреплять функцию к __proto__, присоединяйте ее непосредственно к функции, используя свойство prototype.
  2. Используйте ключевое слово new для создания объекта.

В заключение, prototype функции указывает __proto__ объектов, созданных путем вызова этой функции с ключевым словом new.

Короче говоря, если кто-то спросит, что такое прототип?
Ответ: прототип — это просто свойство, которое каждая функция, которую мы создаем в JavaScript, указывает на объект. Обычно мы используем для совместного использования фрагмента кода в нашем приложении.

Надеюсь, эта статья заставила вас узнать что-то новое.

Удачного кодирования!!!