Лекция
Привет, Вы узнаете о том , что такое self, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое self, window, global, globalthis, this , настоятельно рекомендую прочитать все из категории Логика.
В JavaScript работа с глобальными объектами (self, window, global, globalThis) и контекстом (this) — это фундамент, который определяет, как ваш код будет вести себя в разных средах: браузере, Node.js, Service Worker, а также внутри классов и модулей.
Кросс-платформенность: один и тот же код может выполняться в браузере, на сервере (Node.js) или в воркере. Чтобы избежать ошибок, важно знать, какой глобальный объект доступен в каждой среде.
Предсказуемость: неправильное использование this или глобальных ссылок приводит к неожиданным багам. Например, в ES-модулях this равен undefined, а в скриптах — window.
Чистая архитектура: грамотное использование глобальных объектов помогает писать код без антипаттернов вроде «магических» зависимостей от среды.
Таким образом, понимание контекста и глобальных объектов — это не просто теория, а практическая необходимость. Оно помогает писать код, который будет работать одинаково корректно в любой среде и не превратится в набор антипаттернов.
window — основной глобальный объект.
Содержит все встроенные функции (alert, setTimeout) и глобальные переменные.
Доступен только в браузере.
self — синоним window, но чаще используется в контексте Web Workers и Service Workers.
В обычных скриптах self === window.
globalThis — универсальный стандартный способ получить глобальный объект.
Работает одинаково в браузере, Node.js и других средах.
global — аналог window, но в среде Node.js..
globalThis — современный стандарт, объединяющий window и global.
Рекомендуется использовать именно его для кросс-платформенного кода.
self — основной глобальный объект.
В отличие от браузера, здесь нет window.
Используется для регистрации событий (self.addEventListener('fetch', ...)).
В браузере:
В скриптах вне модулей: this === window.
В модулях (type="module"): this === undefined.
В Node.js:
В глобальной области: this !== global, а равно {} (пустой объект).
В модулях CommonJS: this указывает на module.exports.
Внутри методов класса this указывает на текущий экземпляр объекта.
В статических методах this указывает на сам класс.
В ES-модулях (.mjs или type="module"):
this в верхнем уровне равен undefined.
Это сделано для строгой изоляции модулей.
В CommonJS (Node.js):
this в верхнем уровне равен module.exports.
| Среда | Глобальный объект | self | window | global | globalThis | this (глобально) |
|---|---|---|---|---|---|---|
| Браузер (скрипт) | window | да | да | нет | да | window |
| Браузер (модуль) | window | да | да | нет | да | undefined |
| Node.js | global | нет | нет | да | да | {} или module.exports |
| Service Worker | self | да | нет | нет | да | self |
Жесткая привязка к window или global: такой код не будет работать в другой среде.
Использование this в верхнем уровне модулей: в ES-модулях это всегда undefined, что ломает логику.
Смешивание контекстов: например, вызов метода класса без привязки теряет this и ломает доступ к свойствам.
Используйте globalThis — это современный и универсальный способ получить глобальный объект без привязки к конкретной среде.
В Service Worker — всегда работайте через self, так как window там отсутствует.
В классах — используйте this для доступа к экземпляру, но будьте внимательны при передаче методов как колбэков (привязывайте через .bind() или стрелочные функции).
В модулях — не полагайтесь на this, а используйте явные экспорты и импорты.
Используйте globalThis для универсального доступа к глобальному объекту.
В Service Worker всегда используйте self.
В классах и методах следите за контекстом this, особенно при передаче функций как колбэков.
Избегайте прямого использования window или global, если пишете кросс-платформенный код.
Помните, что в ES-модулях this на верхнем уровне равен undefined.
Таким образом, понимание различий между self, window, global, globalThis и this критично для написания универсального и корректного JavaScript-кода, особенно если вы работаете одновременно с браузером, Node.js и Service Worker.
Исследование, описанное в статье про self, подчеркивает ее значимость в современном мире. Надеюсь, что теперь ты понял что такое self, window, global, globalthis, this и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Логика
Из статьи мы узнали кратко, но содержательно про self
Комментарии
Оставить комментарий
Логика
Термины: Логика