globalThis v JavaScriptu

AndreaAndrea

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 či frames.

  • zatímco v Node.js se jmenuje global či this.

  • Shell enginy V8 d8 nebo JavaScriptCore jsc mají k dispozici pouze this.

  • 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ěží.