Toto je první článek ze série, která dělám, že se zaměřuje na učení, co this
je opravdu v JS. Aby se správně určit, co this
váže k, bychom měli nejprve pochopit některé základní pojmy, které budeme potřebovat při určování this
vazba v JS a vědět, co je hovor-site funkce, je jedním z těch, klíčové koncepty.
než se ponoříme do toho, co je call-site funkce, zkusme nejprve pochopit, proč potřebujeme vědět call-site na prvním místě. Důvody jsou následující:
- pravděpodobně je to něco velmi snadného „umístit“ do kódu. Někdy však některé kódovací vzory mohou skrýt skutečný web volání. Chcete-li tedy odstranit všechny nejednoznačnosti související s tímto tématem ,musíte pochopit call-site (velmi jasně).
- je to jediná věc, na které záleží, pokud chcete pochopit, jak vazba
this
funguje.
Jak již bylo řečeno, pojďme nyní pochopit call-site funkce.
obecně platí, že místo volání funkce je „místo, odkud je konkrétní funkce volána v daném kódu“. Přejděte tedy na toto místo a víte, kde je místo volání této funkce!
Pojďme se nyní, a to prostřednictvím následující fragment kódu, místo, kde se call-stránky funkce jsou:
To bylo snadné! Ale tam je mírný problém s tímto způsobem hledání call-stránky: někdy to může být obtížné rozpoznat ručně (například: představte si, 1000s řádků kódu a jste museli najít call-stránky ručně!).
to je místo, kde call-stack přichází do hry. Co je to zásobník hovorů? Je to zásobník(jak název napovídá). Čeho? Funkcí. Které funkce? Ze všech funkcí, které byly vyvolány. Za co? Abychom vás dostali tam, kde jste právě teď ve své exekuci (tj. aktuální okamžik exekuce).
Pokud se podíváte na svůj zásobník hovorů, pak je skutečný web volání v rámci vyvolání funkce před funkcí, která je právě prováděna.
Teď pojďme použít call-stack najít volání-weby funkcí ve stejný kód použít výše:
RYCHLÝ TIP: Spíše než ručně zjistit pořadí, ve kterém funkce byly uplatňovány (je náchylné k chybám a únavné), byste měli použít nástroj pro ladění v prohlížeči vidět call-stack. Ladicí program se zastaví na řádku nastavíte zarážku a zobrazí zásobník volání, tj. to vám ukáže všechny funkce, které byly uvedeny, aby vám v daném místě v kódu. Proto je real call-site druhou funkcí shora v tomto call-stack (tj. v rámci vyvolání funkce před funkcí, která se právě provádí).
můžete tedy najít místo volání funkce dvěma způsoby:
- manuálním odhalením umístění, na kterém byla funkce vyvolána v daném kódu, nebo
- pohledem na zásobník volání (nejlépe pomocí nástrojů debuggeru).
V případě pochybností (a obecně také) vždy použijte zásobník volání pro správnou identifikaci místa volání funkce.
to je ono! To je vše, co potřebujete vědět, abyste našli místo volání funkce!
Další kroky:
následující článek této série, JavaScript: Naučte se ‚toto‘ – takže co je vlastně Konstruktor?, se zaměřuje na pochopení konstruktérů v JS.
Díky za přečtení. 🙂