Привет Мир 🌏
Прототип — одна из самых важных концепций в 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
— это двухэтапный процесс.
- Вместо того, чтобы прикреплять функцию к
__proto__
, присоединяйте ее непосредственно к функции, используя свойствоprototype
. - Используйте ключевое слово
new
для создания объекта.
В заключение, prototype
функции указывает __proto__
объектов, созданных путем вызова этой функции с ключевым словом new
.
Короче говоря, если кто-то спросит, что такое прототип?
Ответ: прототип — это просто свойство, которое каждая функция, которую мы создаем в JavaScript, указывает на объект. Обычно мы используем для совместного использования фрагмента кода в нашем приложении.
Надеюсь, эта статья заставила вас узнать что-то новое.
Удачного кодирования!!!