Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork3
Global object#167
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Merged
Uh oh!
There was an error while loading.Please reload this page.
Merged
Global object#167
Changes fromall commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Jump to
Jump to file
Failed to load files.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Diff view
Diff view
There are no files selected for viewing
78 changes: 39 additions & 39 deletions1-js/06-advanced-functions/05-global-object/article.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,89 +1,89 @@ | ||
#Globální objekt | ||
Globální objekt poskytuje proměnné a funkce, které jsou dostupné všude. Standardně jsou to ty, které jsou vestavěny do jazyka nebo prostředí. | ||
V prohlížeči se jmenuje`window`,v Node.jsje to `global`,v jiných prostředích může mít jiný název. | ||
Nedávno byl do jazyka přidán standardizovaný název globálního objektu `globalThis`, který by měla podporovat všechna prostředí. Všechny významné prohlížeče jej podporují. | ||
Zde budeme používat`window`, jelikož předpokládáme, že naším prostředím je prohlížeč. Pokud váš skript má běžet v jiných prostředích, je lepší místo něj používat`globalThis`. | ||
Ke všem vlastnostem globálního objektu lze přistupovat přímo: | ||
```js run | ||
alert("Ahoj"); | ||
//je totéž jako | ||
window.alert("Ahoj"); | ||
``` | ||
V prohlížeči se globální funkce a proměnné deklarované pomocí `var` (ne `let/const`!)stávají vlastnostmi globálního objektu: | ||
```js run untrusted refresh | ||
var gVar = 5; | ||
alert(window.gVar); // 5 (stala se vlastností globálního objektu) | ||
``` | ||
Stejný efekt mají deklarace funkcí (příkazy s klíčovým slovem`function`v běhu hlavního kódu, ne funkční výrazy). | ||
Prosíme, nespoléhejte se na to! Toto chování existuje z důvodů kompatibility. Moderní skripty používají [JavaScriptové moduly](info:modules), v nichž se takové věci nedějí. | ||
Kdybychom místo toho použili`let`, toto by se nestalo: | ||
```js run untrusted refresh | ||
let gLet = 5; | ||
alert(window.gLet); // undefined (nestala se vlastností globálního objektu) | ||
``` | ||
Je-li hodnota tak důležitá, že byste ji chtěli učinit globálně dostupnou, uveďte ji rovnou jako vlastnost: | ||
```js run | ||
*!* | ||
//učiní informaci o aktuálním uživateli globální, aby k ní mohly přistupovat všechny skripty | ||
window.aktuálníUživatel = { | ||
jméno: "Jan" | ||
}; | ||
*/!* | ||
//někde jinde v kódu | ||
alert(aktuálníUživatel.jméno); //Jan | ||
//nebo, máme-li lokální proměnnou s názvem „aktuálníUživatel“, | ||
//načteme ji přímo z objektu window (bezpečně!) | ||
alert(window.aktuálníUživatel.jméno); //Jan | ||
``` | ||
Tím chceme říci, že používání globálních proměnných se obecně nedoporučuje. Mělo by jich být co nejméně. Návrh kódu, v němž funkce přijímá „vstupní“ proměnné a produkuje určitý „výstup“, je čistší, méně náchylný k chybám a snadnější na otestování, než když funkce používá vnější či globální proměnné. | ||
##Využití pro polyfilly | ||
Globální objekt používáme k testování, zda jsou podporovány moderní vlastnosti jazyka. | ||
Například otestujeme, zda existuje vestavěný objekt `Promise`(neexistuje v zastaralých prohlížečích): | ||
```js run | ||
if (!window.Promise) { | ||
alert("Máte zastaralý prohlížeč!"); | ||
} | ||
``` | ||
Pokud neexistuje (řekněme, že jsme ve starém prohlížeči),můžeme vytvořit „polyfilly“: přidáme funkce, které toto prostředí nepodporuje, ale v moderním standardu existují. | ||
```js run | ||
if (!window.Promise) { | ||
window.Promise = ... //vlastní implementace moderní vlastnosti jazyka | ||
} | ||
``` | ||
##Shrnutí | ||
-Globální objekt obsahuje proměnné, které by měly být dostupné odkudkoli. | ||
Patří sem vestavěné prvky JavaScriptu, např.`Array`, a proměnné specifické pro určitá prostředí, např.`window.innerHeight` --výška okna v prohlížeči. | ||
-Globální objekt má univerzální název `globalThis`. | ||
...Častěji se na něj však odkazují názvy „ze staré školy“ specifické pro jednotlivá prostředí, např.`window` (prohlížeč) nebo `global` (Node.js). | ||
-Do globálního objektu bychom měli ukládat hodnoty jen tehdy, pokud jsou v našem projektu doopravdy globální, a udržovat jejich počet na minimu. | ||
-V prohlížeči, pokud nepoužíváme [moduly](info:modules),se globální funkce a proměnné deklarované pomocí`var`stávají vlastnostmi globálního objektu. | ||
-Aby náš kód zůstal do budoucna odolný a lépe srozumitelný, měli bychom přistupovat k vlastnostem globálního objektu přímo, např. `window.x`. |
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.