Při hraní v terminálu prohlížeče jsem narazil na funkci JavaScript, která mě trochu zmátla. V tomto příspěvku vysvětlím, proč tato funkce existuje a jak se to děje. Pojďme se na to podívat:
Co je primitivní datový typ?
V informatice jsou primitivní datové typy souborem základních datových typů, na kterých jsou postaveny všechny ostatní datové typy. Každý programovací jazyk má svou vlastní sadu primitiv. V JS máme následující:
Co jsou prototypy?
Stručně řečeno, prototypy jsou mechanismy, pomocí kterých objekty JavaScriptu navzájem dědí zdroje.
A jak to všechno souvisí?
No, v JS nemají primitivové prototypy. Navzdory tomu, pokud se pokusíme získat přístup k prototypu primitiva pomocí __proto__
, dostali bychom následující:
K tomu dochází, protože JS obaluje objektem vše, co nemá prototyp. Jako příklad zvažte následující kód:
Pod kapotou se děje toto (přibližně):
- JS vytvoří obalový objekt z našeho primitivního (něco podobného použití
new Number(123)
); - Zavolejte na číslo
valueOf()
metoda s hodnotou vrácenou z předchozí operace; - Zahodit objekt Number;
- Vraťte primitiva z 2. operace.
Tak tady to máme! Chcete-li získat další informace o Object.prototype.__proto__
, podívejte se na specifikaci ECMAScript 2015