Я не буду рассказывать вам, что такое прототип в javascript. Давайте исследуем это.

Просто создайте файлы html и js. Добавьте файл js в файл html и запустите его в веб-браузере.

Теперь проверьте console вашего браузера.

Дааааа! Получаем прототип.

Прототип — это свойство каждой функции, которая указывает на объект.

Мы уверены, что прототип — это свойство каждой функции. Но он указан как объект, мы его пока не исследуем. Мы должны глубоко двигаться, чтобы понять это.

Теперь, если мы хотим написать общий код для Bird с некоторыми свойствами и некоторыми методами. Как вы можете это сделать? Возможно, вы напишете приведенный ниже код.

ЖДАТЬ…. ЖДАТЬ! Javascript не является языком, основанным на классах, тогда как мы можем писать код на основе классов в Javascript?

Честно говоря, у Javascript есть класс. Javascript поддерживает наследование классов, геттеры, сеттеры, полиморфизм и так далее.

Вы сейчас в замешательстве?

Предупреждение. Не навредите себе. Я не несу ответственности за любой ущерб 😊

Класс Javascript и класс ООП других языков имеют одинаковый синтаксис. Но не следуйте тому же процессу под капотом. Javascript выполнил все задачи, связанные с классом, для управления прототипом. Javascript на самом деле не понимает класс. (Я не злюсь, поверь мне 😞)

В любом случае, давайте посмотрим, как приведенный выше код работает под капотом. Давайте перейдем к коду.

Мы знаем, что функция Bird имеет свойство с именем prototype. Javascript запихнул все методы в прототип и получил к ним доступ оттуда. Теперь у вас должен быть вопрос, мы просто называем crow.sing() вместо crow.prototype.sing(). Когда мы ссылаемся на объект-прототип?

Вы знаете, Javascript очень умен. На самом деле, javascript создается ссылкой под капотом. Давайте посмотрим, как js делает это под капотом и насколько js делает нашу жизнь проще. 😇

Этот код не работает, потому что ключевое слово this является встроенным ключевым словом javascript. Но js делает то же самое, что и приведенный выше код под капотом. Когда мы вызываем функцию с ключевым словом new, например new Bird('crow'). Javascript выполняется let this = Object.create(Bird.prototype); и return this для вас. Как мило, не так ли?

Здесь Object.create создается ссылка для функции-конструктора Bird с прототипом Bird.prototype.

Я знаю, что вы не верите в незнакомцев, и вам нужны доказательства, чтобы поверить в приведенное выше утверждение. Давайте снова перейдем к коду.

Вы получите тот же ответ, что и раньше. На самом деле, js не знает, какое имя будет у вашей переменной. Вместо animal может быть что угодно, верно? Итак, js создает эту переменную как this.

Я очень надеюсь, что теперь вы обосновываете определение прототипа и почему прототип очень важен для Javascript.

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

Первоначально опубликовано на https://sahedthought.hashnode.dev.