Няма да ви казвам какъв е прототипът в javascript. Нека го проучим.

Просто създайте html и js файл. Добавете файла js към файла html и го стартирайте в уеб браузъра.

Сега проверете console на вашия браузър.

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

Прототипът е свойството на всяка функция, която е насочена към обект.

Сигурни сме, че прототипът е свойство на всяка функция. Но той е посочен като обект, ние все още не го изследваме. Трябва да се задълбочим, за да го разберем.

Сега, ако искаме да напишем общ код за Bird с някои свойства и някои методи. Как можете да направите това? Може би ще напишете кода по-долу.

ИЗЧАКАЙТЕ…. ИЗЧАКАЙТЕ! Javascript не е базиран на клас език, тогава как да пишем базиран на клас код в Javascript?

Честно казано, Javascript има класа. Javascript поддържа наследяване на класове, getter, setter, полиморфизъм и т.н.

Объркани ли сте сега?

Предупреждение: Не се наранявайте. Не нося отговорност за какъвто и да е вид щети 😊

Javascript клас и OOP клас на други езици има същия синтаксис. Но не следвайте същия процес под капака. 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.