1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
---
title: globalThis
slug: Web/JavaScript/Reference/Global_Objects/globalThis
translation_of: Web/JavaScript/Reference/Global_Objects/globalThis
---
<div>{{jsSidebar("Objects")}}</div>
<p><span class="seoSummary">Глобальна властивість <code><strong>globalThis</strong></code> містить значення глобального <code>this</code>, яке являється глобальним об'єктом.</span></p>
<div>{{EmbedInteractiveExample("pages/js/globalprops-globalthis.html")}}</div>
<p class="hidden">Код для цього інтерактивного приклада зберігається в репозитарії на GitHub. Якщо Ви бажаєте приєднатися до проекту інтерактивних прикладів, будь-ласка зклонуйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> та відправте нам "pull request".</p>
<p>{{JS_Property_Attributes(1, 0, 1)}}</p>
<h2 id="Синтакс">Синтакс</h2>
<pre class="syntaxbox">globalThis
</pre>
<h2 id="Опис">Опис</h2>
<p>Історично, для доступу до глобальних об'єктів використовується різний синтаксис в різних оточеннях JavaScript. В Веб ви можете використовувати {{domxref("Window.window", "window")}}, {{domxref("Window.self", "self")}}, або {{domxref("Window.frames", "frames")}} - але в <a href="/en-US/docs/Web/API/Worker">Веб Воркерах</a> лише <code>self</code> працюватиме. В Node.js нічого з вище-перерахоованого не працюватиме, і ви повинні використовувати <code>global</code>.<br>
Ключове слово <code>this</code> ви можете використовувати в середині функцій в не-суворому режимі, інакше <code>this</code> буде <code>undefined</code> в Модулях та в середині функцій в суворому режимі. Ви також можете використовувати <code>Function('return this')()</code>, але середовища, що відключають {{jsxref("eval", "eval()")}}, типу <a href="/en-US/docs/Glossary/CSP">CSP</a> в браузерах, перешкоджають використанню {{jsxref("Function")}} в такому вигляді.</p>
<p>Властивість <code>globalThis</code> надає стандартний метод доступу до глобального значення <code>this</code> (і як наслідок, безпосередньо до глобального об'єкту) не залежно від середовища. Навідміну від подібних властивостей, таких як <code>window</code> та <code>self</code>, воно гарантує роботу в середовищі де є <code>window</code> та де його немає. Таким чином, ви можете отримати доступ до глобального об'єкту навіть не знаючи в якому середовищі працює код. Щоб запам'ятати назву, просто запам'ятайте що в глобальному отчені значення <code>this</code> дорівнює <code>globalThis</code>.</p>
<h3 id="HTML_та_WindowProxy">HTML та WindowProxy</h3>
<p>В різних двіжках об'єкт <code>globalThis</code> буде посиланням до безпосередього глобального об'єкту, але в браузерах, через міркування безпеки в iframe та cross-window взаємодії, він є посиланням до {{jsxref("Proxy")}} навколо фактичного глобалього об'єкту(до якого ви не можете звернутися безпосередньо). Ця відмінність рідко є актуальною для загального використання, але важливо її запам'ятати.</p>
<h3 id="Іменування">Іменування</h3>
<p>Деякі інші популярні варіанти імен, такі як <code>self</code> та <code>global</code> були видалені з розгляду через їх схильність порушити сумістність з існуючим кодом. Детальніше дивіться <a href="https://github.com/tc39/proposal-global/blob/master/NAMING.md">документ мовних пропозиції</a>.</p>
<h2 id="Приклади">Приклади</h2>
<p>Задовго до <code>globalThis</code>, єдиним надійним крос-платформенним варіантом отримати глобальний об'єкт для оточення був <code>Function('return this')()</code>. Однак, він був причиною <a href="/en-US/docs/Web/HTTP/CSP">CSP</a> порушень в деяких налаштуваннях, таким чином <a href="https://github.com/paulmillr/es6-shim">es6-shim</a> використовує додаткову перевірку, наприклад:</p>
<pre class="brush: js">var getGlobal = function () {
if (typeof self !== 'undefined') { return self; }
if (typeof window !== 'undefined') { return window; }
if (typeof global !== 'undefined') { return global; }
throw new Error('unable to locate global object');
};
var globals = getGlobal();
if (typeof globals.setTimeout !== 'function') {
// нема setTimeout в даному оточенні!
}
</pre>
<p>За допомогою <code>globalThis</code>, додатковий пошук/перевірки для глобального об'єкту не потрібні більше:</p>
<pre class="brush: js">if (typeof globalThis.setTimeout !== 'function') {
// нема setTimeout в даному оточенні!
}</pre>
<h2 id="Специфікації">Специфікації</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Специфікація</th>
<th scope="col">Статус</th>
<th scope="col">Коментар</th>
</tr>
<tr>
<td>{{SpecName("ESDraft", "#sec-globalthis", "<code>globalThis</code>")}}</td>
<td>{{Spec2("ESDraft")}}</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="Браузерна_Сумістність">Браузерна Сумістність</h2>
<div class="hidden">Таблиця сумістності на цій сторінці згенерована з структурованних данних. Якщо ви бажаєте прийняти участь в формуванні даних, будь-ласка, перевірте <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> та направте нам "pull request".</div>
<p>{{Compat("javascript.builtins.globalThis")}}</p>
|