Метод bind() в JavaScript создает новую функцию с привязанным значением this и, необязательно, со связанными аргументами. Значение — это объект, к которому привязана функция, и оно определяет, на что ссылается ключевое слово внутри функции. Обычный вариант использования — установить значение функции для определенного объекта.

Большинство функций программирования немного расплывчаты, если они не сопровождаются реальными вариантами использования. Давайте рассмотрим метод JavaScript bind() вместе с несколькими быстрыми примерами, чтобы понять, насколько он практичен.

Как вы, возможно, знаете, метод bind() в JavaScript создает новую функцию с привязкой значения this и, необязательно, привязкой аргументов. Значение this — это объект, к которому привязана функция, и оно определяет, на что ссылается ключевое слово this внутри функции. Если это звучит слишком расплывчато и обобщенно, помогут несколько примеров.

Обычный вариант использования метода bind() — установить значение this функции для определенного объекта. Это может быть полезно, когда у вас есть функция, которая должна работать с определенным объектом, но вы не хотите изменять саму функцию.

Вот пример кода, чтобы было понятно:

const myPerson = {
name: 'Jiminy',
age: 29,
msg() {
console.log(`Привет, я ${this.name} и мне ${this.age} лет.`);
}
};

const otherPerson = {
name: ‘Demoine’,
age: 35
};

constboundMsg = myPerson.msg.bind(otherPerson);

// Журнал: «Привет, я Демоин, мне 35 лет».
boundMsg();

В приведенном выше примере у меня есть объект myPerson с методом msg(), который регистрируется в консоли, используя ключевое слово this для ссылки на объект. У меня также есть другой объект otherPerson со своим именем и возрастом.

Затем я создаю функциюboundMsg, вызывая метод bind() в методе msg() объекта myPerson, и передаю otherPerson в качестве значения this. Это означает, что при вызовеboundMsg() ключевое слово this внутри функции будет ссылаться на otherPerson, а не на myPerson.

Как видите, довольно здорово иметь возможность использовать bind() для создания новой функции, которая работает с другим объектом, не изменяя и не создавая копию исходной функции.

Еще один пример использования bind() — создание функции с заранее заданными аргументами. Проиллюстрировать:

function add(a, b) {
return a + b;
}

const addTen = add.bind(null, 10);

console.log (добавить десять (16)); // 26
console.log(addTen(8)); // 18

В этом примере у меня есть простая функция add(), которая принимает два аргумента и возвращает сумму. Затем я создаю новую функцию с именем addTen(), вызывая bind() в add(). Я использую null в качестве этого значения и 10 в качестве первого аргумента.

Это означает, что при вызове addTen() он всегда будет добавлять 10 к аргументу, переданному новой функции. Опять же, нет необходимости изменять исходную функцию или создавать ее копию, использование bind() делает это проще.

Вы можете попробовать оба приведенных выше примера кода в этом CodePen.

Теперь об инструментах этой недели!

Реагировать Инструменты

Bright
Серверный компонент React для добавления подсветки синтаксиса на страницы, который ничего не добавляет к размеру вашего пакета и использует все темы из VS Code.

@react-hookz/web
Библиотека универсальных хуков React, созданная с осторожностью и с учетом совместимости с SSR.

День разработчика: знакомство с новостями Retool в первом ряду
Присоединяйтесь к нашим руководителям продуктов и инженеров, чтобы впервые узнать о новинках Retool. Мы подробно рассмотрим новые функции GPT, поддержку Python и совершенно новый способ быстрого развертывания баз данных. СПОНСОР

Боковая панель React Pro
Набор компонентов React для создания высокоуровневой и настраиваемой боковой навигации.

react-ansi-animation
Компоненты React для отображения изображений ANSI. Он может отображать текстовые элементы HTML или на холсте, а также может выводить текст для приложений CLI на основе рукописного ввода.

Evolu
Библиотека React Hooks для локальных приложений(opens in a new tab) со сквозным шифрованием резервного копирования и синхронизации с использованием SQLite(opens in a new tab) и CRDT.

react-curved-input
Небольшой компонент React для превращения любого пути SVG в ползунок, который пользователь может использовать для интерактивной анимации объекта по форме пути SVG.

Flexboard
Библиотека компонентов React для изменяемых размеров боковых панелей с параметрами перетаскивания, минимальной/максимальной ширины, стиля и т. д.

relay-nextjs
Интеграция Relay Hooks для приложений Next.js, разработанных для серверного рендеринга и использующих React Suspense под капотом.

React Visual Grid
Компонент React для создания сеток изображений и макетов каменной кладки с хорошей производительностью, поддержкой различных макетов, настраиваемыми размерами эскизов и многим другим.

Conform
Библиотека проверки первой формы с прогрессивным улучшением для Remix и React Router.

На радаре выпуска:

Инструменты тестирования и отладки

trace.cafe
Если вы загрузили профиль производительности (то есть трассировку, обычно файл JSON) из инструментов разработчика вашего браузера, вы можете подать в суд на этот инструмент, чтобы загрузить и изучите трассировку с видимой панелью производительности, как в DevTools.

Отчет WebPerformance
Это уникальная идея. Каждую неделю получайте по электронной почте персонализированный отчет о состоянии веб-сайта, производительность и веб-оптимизация которого вы хотите отслеживать, включая Core Web Vitals на базе WebPageTest.

XSSHunter
Используйте Docker и Dockery Compose для тестирования и поиска уязвимостей слепого межсайтового скриптинга.

Не просто читайте новости — делайте новости
Ищете преимущество в бизнесе? Не смотрите дальше информации. Их команда отмеченных наградами журналистов предоставляет эксклюзивную информацию о технологиях и финансах с оригинальными репортажами, крупными интервью и многим другим, чего вы больше нигде не найдете. Подпишитесь сейчас и сэкономьте 25%. СПОНСОР

precloud
Интерфейс командной строки с открытым исходным кодом, который выполняет проверки инфраструктуры как кода, чтобы выявить потенциальные проблемы развертывания перед развертыванием.

Rayst
Расширение Chrome, которое отображает боковую панель со статистикой и технологиями, связанными с любой посещаемой вами веб-страницей.

tslog
Красивый интерфейс для ведения журналов для TypeScript и JavaScript для мощных, быстрых и выразительных журналов.

swr-devtools
Инструмент разработчика для SWR, библиотеки перехватчиков React для выборки данных, с поддержкой SWR v1 или более поздней версии.

tinybench
Простая и легкая библиотека для тестирования производительности размером 7 КБ (2 КБ в минимизированном/сжатом формате), которая использует веб-API (т. е. process.hrtime или performance.now) для выполнения тестов кода в нескольких Среды выполнения JavaScript.

Углеродно-нейтральный веб-сайт
Калькулятор выбросов углерода, который учитывает энергопотребление устройства и сервера во время просмотра веб-страницы.

spall
Библиотека профилировщика и веб-интерфейс для изучения вашего кода и поиска потенциальных проблем с производительностью.

Некатегоризируемые

Node.js Toolbox
Найдите активно поддерживаемые и популярные библиотеки в экосистеме Node.js, фильтруемые по категориям.

Беспарольный
API, упрощающий ввод паролей и веб-аутентификацию. В настоящее время бесплатно, пока находится в бета-версии.

Ластик
Доска для инженерных групп, предлагающая неограниченное количество соавторов и до 5 рабочих мест в бесплатном плане.

файловый браузер
Интерфейс управления файлами на основе Go в указанном каталоге, который можно использовать для загрузки, удаления, предварительного просмотра, переименования и редактирования ваших файлов.

CronTool
Бесплатный инструмент для отладки, редактирования, изучения и просмотра выражений crontab/cron, регистрация не требуется.

Ai Tool Hunt
Доступный для поиска и разбитый по категориям каталог из более чем 1400 инструментов на основе ИИ, который поможет вам открыть для себя новейшие приложения и службы ИИ.

Lotus
Инструмент с открытым исходным кодом для оптимизации, тестирования и развертывания моделей ценообразования и упаковки на основе использования, по количеству рабочих мест или для предприятий за считанные минуты, чтобы раскрыть истинную ценность вашего SaaS-продукт.

Не спрашивайте кода
Сообщество, похожее на Stack Overflow, где вы можете задавать и отвечать на вопросы, связанные с инструментами и процессами без кода.

Не просто читайте новости — делайте новости
Ищете преимущество в бизнесе? Не смотрите дальше информации. Их команда отмеченных наградами журналистов предоставляет эксклюзивную информацию о технологиях и финансах с оригинальными репортажами, крупными интервью и многим другим, чего вы больше нигде не найдете. Подпишитесь сейчас и сэкономьте 25%. СПОНСОР

AXplorer
Частный, быстрый и безопасный веб-браузер, предназначенный для заработка, с бесплатным встроенным VPN, который включает в себя встроенный крипто-кошелек.

Игровая площадка OG Image
Площадка для экспериментов и тестирования создания изображений для социальных сетей с помощью протокола Open Graph и библиотеки Vercel og.

Fragment Mono
Моноширинная кодовая версия классического шрифта Helvetica, созданная путем изменения и расширения другого шрифта под названием Nimbus Sans.