Syntaktická kontrola
Jaký je výsledek tohoto kódu?
let uživatel = {
jméno: "Jan",
jdi: function() { alert(this.jméno) }
}
(uživatel.jdi)()
P.S. Je tady chyták :)
Chyba!
Zkuste si to:
let uživatel = {
jméno: "Jan",
jdi: function() { alert(this.jméno) }
}
(uživatel.jdi)() // chyba!
Ve vÄtÅ¡inÄ prohlÞeÄů nám chybová zpráva nedává mnoho informacà o tom, co bylo Å¡patnÄ.
Chyba se objevila proto, že za uživatel = {...} chybà stÅednÃk.
JavaScript automaticky nevložà stÅednÃk pÅed závorku (uživatel.jdi)(), takže pÅeÄte kód jako:
let uživatel = { jdi:... }(uživatel.jdi)()
Pak také vidÃme, že takový spojený výraz je syntakticky volánÃm objektu { jdi: ... } jako funkce s argumentem (uživatel.jdi). A to se také odehrává na stejném Åádku jako let uživatel, takže objekt uživatel jeÅ¡tÄ ani nebyl definován, proto nastane chyba.
Jestliže vložÃme stÅednÃk, bude vÅ¡e v poÅádku:
let uživatel = {
jméno: "Jan",
jdi: function() { alert(this.jméno) }
};
(uživatel.jdi)() // Jan
ProsÃme vÅ¡imnÄte si, že závorky okolo (uživatel.jdi) tady nic nedÄlajÃ. Obvykle nastavujà poÅadà operacÃ, ale tady jako prvnà zafunguje teÄka . tak jako tak, takže závorky nemajà žádný efekt. Vadà jenom chybÄjÃcà stÅednÃk.