| Глобальный объект JavaScript |
|
| Добавил(а) microsin | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Глобальный объект это объект, который существует в глобальной области видимости и предоставляет встроенные функции, методы и свойства, доступные из любого места программы. window. В браузере глобальным объектом является window: window.alert('Привет!'); // Можно вызывать без window alert('Привет!'); // То же самое Глобальные переменные становятся свойствами объекта window: var name = 'John'; console.log(window.name); // 'John' global. В Node.js глобальным объектом является global: global.console.log('Hello'); // Можно без global console.log('Hello'); // То же самое globalThis. Объект globalThis обеспечивает стандартизированный способ доступа к глобальному объекту в любой среде: // Работает везде: браузер, Node.js, Deno, Bun. Например, следующие три строки кода делают одно и то же в среде браузера: window.alert("Привет"); Однако следует иметь в виду, что несмотря на наличие globalThis, набор функций и методов в разных окружениях может отличаться. Например функция alert для JavaScript доступна в браузере, но в Node.js такой функции нет. Основные свойства глобального объекта:
Основные функции:
Встроенные конструкторы: Object // Базовый объект [Особенности и нюансы] 1. var vs let/const var a = 1; // Добавляется в globalThis 2. Безопасность Глобальный объект доступен всем, что может привести к конфликтам: // Плохо: загрязнение глобальной области 3. Проверка окружения if (typeof window !== 'undefined') { [Практические примеры] Глобальные конфигурации: // config.js Полифиллы: // Добавление метода, если он отсутствует Полифилл (от англ. polyfill — "заплатка") — это код, который добавляет в старые браузеры или среды выполнения современные функции JavaScript, чтобы они вели себя так же, как в новых версиях. Простыми словами: это "мост", который позволяет использовать новые фичи там, где их ещё нет. [Зачем нужны полифиллы?] Проблема: разные браузеры поддерживают разные версии JavaScript. // Метод Array.includes() появился в ES2016 Решение: добавить полифилл, который эмулирует этот метод. // Полифилл для Array.includes() Примеры популярных полифиллов: 1. Promise (ES6) // Старые браузеры не поддерживают Promise 2. fetch (для HTTP-запросов) // fetch не работает в IE 3. Object.assign (ES6) if (!Object.assign) { 4. Array.from (ES6) if (!Array.from) { [Как использовать полифиллы] Способ 1: ручное добавление < !-- Подключаем полифиллы вручную --> < script src="https://cdn.jsdelivr.net/npm/core-js-bundle@3/minified.js">< /script> < script src="https://cdn.jsdelivr.net/npm/regenerator-runtime@0.13/runtime.js">< /script> < script src="your-app.js">< /script> Способ 2: через сборщики (Webpack, Vite) // В entry-файле приложения Способ 3: автоматическое определение (Babel) // babel.config.js module.exports = { Популярные библиотеки полифиллов:
Использование polyfill.io: < !-- Автоматически подгружает только нужные полифиллы --> < script src="https://polyfill.io/v3/polyfill.min.js?features=Promise, [Полифиллы vs Транспиляция]
Пример: // Исходный код (современный JS) [Когда НЕ нужно использовать полифиллы] 1. Если поддерживаются только современные браузеры. 2. Если функция уже есть в окружении (проверяйте!). 3. Если производительность критична (полифиллы медленнее нативных реализаций). Проверка поддержки: // Проверяем, нужен ли полифилл Практический пример: < !DOCTYPE html> < html> < head> < !-- 1. Проверяем поддержку --> < script> Итог: полифилл это код-заплатка, который: - Добавляет новые возможности в старые среды. Главное правило: всегда проверяйте наличие функции перед добавлением полифилла и используйте автоматические инструменты (Babel + core-js) для управления ими. Модули-одиночки // Использование глобального объекта для синглтона Совет: избегайте загрязнения глобальной области. Используйте globalThis для кроссплатформенного кода и модули для изоляции.
|