Каждый программист 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
возвращает новую функцию .