Каждый программист JavaScript проходит через один и тот же запутанный мыслительный процесс, например, когда использовать Apply, Call, Bind; в чем разница между call, apply и bind ; а зачем нам функция this?
После прочтения этой статьи вы поймете Apply/Call/Bind. Чтобы вы полностью поняли связывание, вызов и применение; вы должны понимать концепцию JavaScript this.

Что такое «this»?

В JavaScript ключевое слово this относится к объекту.

Одна забавная особенность JavaScript заключается в том, что значение this меняется в зависимости от контекста, в котором вызывается this. По умолчанию он относится к глобальной области, но когда он вызывается внутри функции, он относится к этой функции.

JavaScript позволяет объекту содержать функции в качестве свойств. Эти свойства обычно называются методами.

Обычно объектному методу для выполнения своей работы требуется доступ к информации, хранящейся в объекте.

Например, для кода внутри user.fullName() может потребоваться имя файла user.

Для доступа к объекту метод может использовать ключевое слово this.

Здесь во время выполнения user.fullName() значение this будет user.

В приведенном ниже примере нет синтаксической ошибки:

Значение this оценивается во время выполнения в зависимости от контекста.

Например, здесь одна и та же функция назначена двум разным объектам и имеет разное this в вызовах:

Правило: если вызывается obj.fullName(), то this становится obj во время вызова fullName. Таким образом, в приведенном выше примере это может быть либо user, либо user2.

Когда и зачем использовать Apply/Call/Bind?

Есть два важных понятия:

# Во-первых, перенять методы другого объекта и

# Во-вторых, создать собственное значение для this

Принятие методов другого объекта

Метод Call(). Метод call() позволяет назначать и вызывать метод или функцию, принадлежащую одному объекту, для другого объекта. Call вызывает функцию и позволяет передавать аргументы один за другим.

Метод Apply() —онаналогично вызову. Он немедленно вызывает функцию и позволяет указать значение this. Единственное различие между методом «применить» и «вызов» заключается в том, что вместо указания каждого аргумента по одному. Вы можете передать аргументы в виде массива.

Метод Bind().Метод Bind немного отличается от метода вызова и применения, а не мгновенно вызывает функцию, которую он фактически создает, и возвращает новую функцию. Новая функция имеет определенное thisзначение, прикрепленное к ней.

Создание пользовательского значения для «этого»

Различия между вызовом, применением и привязкой

И метод call, и метод apply вызывают функцию. Единственная разница между ними заключается в том, что call принимает аргументы, разделенные запятыми, в то время как в случае метода apply требуемые аргументы необходимо передавать в виде массива или объекта, подобного массиву. Bind возвращает новую функцию .