Nový globalThis
je novým standardním objektem, který byl zaveden, aby řešil problém s různými globalními objekty v různých prostředích.
Dříve se vývojáři museli spoléhat na různé způsoby, aby získali přístup k globalnímu objektu v závislosti na tom, kde kód běží:
Například
-
v prohlížeči se můžete dostat k tomuto objektu pomocí proměných
window
,self
,this
čiframes
. -
zatímco v Node.js se jmenuje
global
čithis
. -
Shell enginy V8
d8
nebo JavaScriptCorejsc
mají k dispozici pouzethis
. -
Web Workers používají
self
. -
A tohle nebude určitě kompletní výčet :).
Proměnná globalThis
^t39 zavádí jednotný mechanismus pro přístup ke globálnímu this
v libovolném prostředí nebo kontextu.
Je dostupná od verze ECMAScript 10.0.
Např.
console.log(globalThis.Math); // Math object
console.log(globalThis.parseInt('10')); // 10
let myVar = 'Hello';
console.log(globalThis.myVar); // "Hello"
Kolize s this
Z toho nám vyplívají minimálně dva problémy.
Ve volání funkce se nám bude this
mlátit se scope samotné funkce.
V tomto případě lze ke globálnímu objektu stále přistupovat pomocí funkce Function('return this')()
, ale tato forma je při některých nastaveních CSP nedostupná.
Špatná přenositelnost kódu
Tahle odlišně pojmenované objekty zhoršují přenositelný kódu. globalThis
tedy řeší problém tím, že poskytuje standardní způsob, jak se odkazovat na globalní objekt, bez ohledu na to, kde kód běží.