Vyhledávací algoritmus
důležitost: 5
Tato úloha má dvě části.
Máme následující objekty:
let hlava = {
brýle: 1
};
let stůl = {
pero: 3
};
let postel = {
peřina: 1,
polštář: 2
};
let kapsy = {
peníze: 2000
};
- Použijte
__proto__k přiřazení prototypů takovým způsobem, že každé hledání vlastností bude dodržovat cestu:kapsy→postel→stůl→hlava. Napříkladkapsy.peroby mělo být3(nalezeno vestůl) apostel.brýleby mělo být1(nalezeno vhlava). - Odpovězte na otázku: je rychlejší získat
brýlejakokapsy.brýle, nebo jakohlava.brýle? Proveďte benchmark, bude-li zapotřebí.
-
Přidejme
__proto__:let hlava = { brýle: 1 }; let stůl = { pero: 3, __proto__: hlava }; let postel = { peřina: 1, polštář: 2, __proto__: stůl }; let kapsy = { peníze: 2000, __proto__: postel }; alert( kapsy.pero ); // 3 alert( postel.brýle ); // 1 alert( stůl.peníze ); // undefined -
V moderních motorech s vylepšeným výkonem není rozdíl mezi tím, zda bereme vlastnost z objektu nebo jeho prototypu. Motory si pamatují, kde byla vlastnost nalezena, a při dalším požadavku to využijí.
Například pro
kapsy.brýlesi pamatují, kde našlybrýle(v objektuhlava), a příště budou hledat rovnou tam. Jsou také dostatečně chytré, aby si při nějaké změně své vnitřní mezipaměti aktualizovaly, takže tato optimalizace je bezpečná.