Call, Apply y Bind
En simples palabras todos estos métodos se usan para cambiar el valor del contexto(this) dentro de una función, es decir, podemos enviarle un contexto(this) al momento de la llamada a una función.
Call
Usando el método call
, podemos invocar una función, pasando un valor que será tratado como this
dentro de ella.
En el ejemplo anterior, estamos invocando el método call
en la función printName
al pasar newObj
como parámetro, por lo que ahora this
dentro de printName
apunta a newObj
, por lo tanto, this.myName
imprime mafeserna
.
Argumentos
dónde:
foo
es la función que estamos invocando al pasar el nuevo valorthis
que esthisObj
arg1
,arg2
, son los argumentos adicionales que tomará la funciónfoo
(param1
=arg1
,param2
=arg2
)
Apply
La función apply
es muy similar a la función call
. La única diferencia entre call
y apply
es la diferencia en cómo se pasan los argumentos.
call
— pasamos argumentos como valores individuales, comenzando desde el segundo argumentoapply
— los argumentos adicionales se pasarán como un arreglo
en el ejemplo anterior, tanto el método call
como apply
en la función sayHello
están haciendo lo mismo, la única diferencia es cómo estamos pasando argumentos adicionales.
Bind
A diferencia de los métodos call
y apply
, bind
no invocará la función directamente, sino que cambiará el valor this
dentro de la función y devolverá la instancia de la función modificada.
Podemos invocar la función devuelta más tarde.
pasando argumentos adicionales:
pasar argumentos adicionales en bind
funciona de manera similar al método call
, podemos pasar argumentos adicionales como valores individuales a partir del segundo argumento del método bind
.
En el caso del método bind
, podemos pasar argumentos adicionales de dos formas:
Al llamar al método
bind
en sí mismo, podemos pasar argumentos adicionales junto con el valor dethis
a esa función.Otra forma es que podemos pasar argumentos adicionales mientras invocamos la función de retorno del método
bind
.
Podemos seguir cualquiera de las formas anteriores y funciona de manera similar sin ninguna diferencia en la funcionalidad.
NOTA: si no pasamos ningún valor o pasamosnull
mientras llamamos a los métodos call
, apply
, bind
, entonces esta
función interna de llamada apuntará al objeto global
.
No podemos usar los métodos call
, apply
y bind
en las funciones flecha para cambiar el valor de this
, porque las funciones de flecha no tienen su propio contexto this
.
El this
dentro de la función de flecha apuntará a la función externa/principal en la que está presente.
Por lo tanto, aplicar estos métodos en la función de flecha no tendrá ningún efecto.
Last updated