Собственные методы javascript call, bind (и apply) могут делать то же самое. У некоторых их немного больше, но у них есть одна общая черта: они меняют контекст this.

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

call () по сути делает то же самое, что и bind (): он меняет то, на что ссылается Object this. Это то, что крутые разработчики с шейными бородками называют «изменением контекста этого».

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

Хорошо, давайте сначала посмотрим, что происходит, когда мы не используем call ():

Получаем ошибку. Это потому, что this внутри функции sayHello () не относится к personData.

Я пишу javascript в строгом режиме. В этом случае this в глобальной области будет иметь значение undefined. Для получения дополнительной информации посетите javascriptissexy.com.

Итак, как нам заставить это работать? Мы хотим связать this, внутри функции , sayHello () с personData и выполнить функцию вместе с аргументом. И будь я проклят! Вот для чего они изобрели функцию call ():

И это работает! Помните; когда вы опускаете скобки в имени функции, она не выполняется. В этом случае выполнение происходит через call ().

Первый аргумент call () - это новый контекст this. Это означает, что объект, на который вы хотите, чтобы this ссылался на ( personData). Все аргументы после этого являются аргументами вызываемой вами функции (и не являются обязательными).

И это все. Не более того. И на самом деле не так сложно, как могло показаться. Как всегда: не магия, а просто javascript.