Это третья статья из серии, посвященной тому, что на самом деле представляет собой this в JS.

Почти для всех функций (тех, которые доступны в JS, и тех, которые мы пишем) доступны .call(..) и .apply(..).

В этом блоге мы рассмотрим, как эти методы помогают нам явно связать this с конкретным объектом.

ПРИМЕЧАНИЕ. Мы не исследуем различия между .call(..) и .apply(..). Они отличаются, когда вы передаете им дополнительные параметры. Мы пытаемся понять, как мы можем использовать их в явной привязке this. Когда мы хотим явно привязать this к определенному объекту, .call(..) и .apply(..) одинаковы, и этому посвящен этот блог.

Теперь давайте погрузимся прямо в.

Итак, наша цель — явно связать this с конкретным объектом. Но что такое явная привязка this? Это когда вы решаете на месте вызова, к какому объекту вы хотите привязать вызов функции this. Как следует из названия, вы явно заявляете, что «Эй, это объект, к которому я хочу привязать this (для этого конкретного вызова функции)!».

В JS привязка this определяется на месте вызова функции. Итак, мы будем использовать .call(..)/.apply(..) на месте вызова функции. (Если вы не знаете, как найти сайт вызова функции в JS, вы можете обратиться к блогу «JavaScript: поиск сайта вызова функции»).

Рассмотрим следующую функцию:

Теперь рассмотрим следующий объект:

Теперь мы хотим привязать (явно привязать) объект, который мы только что создали (т.е. tinkerFairy), к функции, которую мы создали выше (т.е. createFairy).

Это можно сделать очень легко как с .call(..), так и с .bind(..). Вы можете сделать:

Или вы можете сделать:

Из вывода видно, что this нашей функции createFairy теперь привязано к объекту tinkerFairy для обоих вызовов функций, показанных выше.

Вот и все! Вот как вы можете вызвать функцию, используя .call(…) или .apply(..), чтобы явно привязать ее this к любому объекту по вашему выбору.

Дальнейшие шаги:

Следующая статья из этой серии JavaScript: изучите «этоэто не то!» посвящена исследованию неправильных представлений о том, что такое this в JS.

Заключительные комментарии:

Я делаю целую серию статей на тему Javascript: Learn ‘this’. Если вас интересуют предыдущие статьи этой серии, вы можете обратиться к:

Спасибо, что прочитали. :-)