🌁Ahoj všichni! 🌁
Dnes budeme diskutovat o Prototypech a řetězec prototypů v JavaScriptu. Prototypy jsou rozhodně jedním z nejobtížněji vizualizovatelných konceptů JavaScriptu kvůli jejich zdánlivě abstraktní povaze – ve skutečnosti jsou však velmi konkrétní + důležité pro pochopení základní struktury JavaScriptu. Pojďme se dnes naučit něco nového!
💭💭💭💭💭💭💭💭💭💭💭💭💭
Zde jsou naše cíle :
- Co je prototyp?
- Jaké datové typy mají prototypy?
- Co to znamená, když řekneme, že JavaScript je jazyk založený na prototypech?
- Co nám dávají prototypy?
- Co je to prototypová vlastnost?
- Co je vlastnost proto?
- Jak funkce a prototypy spolupracují?
Úvod
Prototypy jsou objekty spojené s každým datovým typem standardně v JavaScriptu.
Proto, zjednodušeně řečeno, JavaScript je považován za jazyk založený na prototypech. Kdykoli je instance objektu vytvořena, poskytuje stroj JavaScriptu vlastnost prototypu na funkci konstruktoru a vlastnost proto k instanci objektu . Ale o tom později.
Prototypy nám umožňují definovat metody nebo vlastnosti všem instancím vytvořeným konkrétním objektem. V souladu s tím má každá instance tohoto objektu přístup k metodě nebo vlastnosti. To je obrovské, protože to šetří čas a vysušuje náš kód, protože metoda nebo vlastnost nemusí být definována ve funkci konstruktoru objektu nebo předefinována pro každou instanci objektu.
Vlastnost prototypu a konstruktéři
Zatím jsme se naučili, že vlastnosti prototypu nám umožňují přístup k vlastnostem a/nebo metodám. Abychom tomu i nadále rozuměli, je také důležité poznamenat, že všechny konstruktéry objektů mají vlastnost prototype . A každý konstruktér objektů má prototyp „Prototypu objektu“.
Podívejme se na příklad:
function Person(name){
this.name = name
}
Jedná se o jednoduchý objektový konstruktor. Z toho můžeme vytvořit nekonečné množství instancí „Osoba“, z nichž každá má vlastnost „jméno“.
Prototyp našeho konstruktoru objektu, Osoba, je "Prototyp objektu". Můžeme to vidět, pokud přihlásíme náš konstruktor objektů do konzoly:
Proto vlastnost instancí
Proč je to důležité? Je to důležité, protože každá instance objektu má vlastnost proto, která ukazuje na prototyp objektu funkce konstruktoru, který vytvořil uvedenou instanci. A úkolem proto vlastnosti je podívat se na objektový prototyp konstruktoru a zjistit, zda má nějaké metody nebo funkce dostupné k použití.
Zjistili jsme, že JavaScript je prototypový jazyk; JavaScript bude ve skutečnosti pokračovat tímto vzorem pohledu od vlastnosti proto instance k prototypu objektu konstruktoru, dokud nedosáhne hodnoty „null“. Tento vzor se nazývá Prototype Chain .
Řetězec urychluje hledání, zda má instance objektu přístup k určitým metodám; jednoduše používá tento "vzorec":
Instance.__proto__ === Constructor.prototype
Pokud je vlastnost proto instance přísně rovna prototypu konstruktoru, pak víme, že instance byla vytvořena z tohoto konstruktoru objektu.
Podívejme se na příklad v konzoli. Vytvořil jsem instanci osoby s názvem "Charlie".
Pak jsem zkontroloval náš malý vzorec:
Můžete také zkontrolovat tímto způsobem:
console.log(Charlie.__proto__ === Person.prototype)
// the console should return 'true'
Shrnutí + Závěr
Vím, že je to těžké obejít. Nicméně doufám, že se nám společnými silami podařilo rozbalit nějaký prototypový řetěz. Je velmi užitečné porozumět tomu, co se děje pod objekty a instancemi JavaScriptu, abyste dále viděli, jak spolu váš kód souvisí. A také jak to ovlivní další části vašeho kódu.
** Pamatujte, že se stále učím stejně dobře jako vy. Neváhejte zanechat komentáře, dotazy + návrhy níže. Šťastné učení! **
🌁🌁🌁