Articles

Javascript: call (), apply () y bind ()

call (), apply () y bind () — una nueva esperanza

Hasta ahora hemos tratado las funciones como objetos que se componen de un nombre (opcional, también puede ser una función anónima) y el código que ejecuta cuando se invoca. Pero esa no es toda la verdad. Como una persona que ama la verdad, debo hacerle saber que una función en realidad se parece más a la siguiente imagen:

¿Qué es esto??????? No te preocupes! Ahora recorreré estos 3 métodos similares que aparecen en cada función con ejemplos. ¡Alégrense!

bind ()

Los documentos oficiales dicen: El método bind() crea una nueva función que, cuando se llama, tiene su palabra clave this establecida en el valor proporcionado. (En realidad habla de más cosas, pero lo dejaremos para otro momento 🙂 )

Esto es extremadamente potente. Nos permite definir explícitamente el valor de this cuando se llama a una función. Veamos cooooode:

con el bind() method on line 14.

Vamos a desglosarlo. Cuando usamos el método bind():

  1. el motor JS crea una nueva instancia pokemonNamey enlaza pokemoncomo su variable this. Es importante entender que copia la función pokemonName.
  2. Después de crear una copia de la función pokemonName es capaz de llamar a logPokemon(), aunque inicialmente no estaba en el objeto pokemon. Ahora reconocerá sus propiedades (Pika y Chu) y sus métodos.

Y lo bueno es que, después de enlazar () un valor, podemos usar la función como si fuera cualquier otra función normal. Incluso podríamos actualizar la función para aceptar parámetros y pasarlos de esta manera:

call(), apply ()

Los documentos oficiales de call() dicen: El métodocall()llama a una función con un dadothis valor y argumentos proporcionados individualmente.

Lo que significa, es que podemos llamar a cualquier función, y especificar explícitamente a qué this debe hacer referencia dentro de la función que llama. Muy similar al método bind()! Esto definitivamente puede salvarnos de escribir código hacky (a pesar de que todos seguimos siendo hackerzzz).

Las principales diferencias entre bind() y call() es que el call() método:

  1. Acepta parámetros adicionales como bien
  2. se Ejecuta la función que fue llamado de inmediato.
  3. El método call() no hace una copia de la función a la que se está llamando.

call() y apply() servir el mismo propósito. La única diferencia entre cómo funcionan es que call() espera que todos los parámetros se pasen individualmente, mientras que apply () espera una matriz de todos nuestros parámetros. Ejemplo:

Aviso de que apply acepta y array, y call espera cada parámetro individualmente.

Estos métodos incorporados, que existen en cada función JS, pueden ser muy útiles. Incluso si no termina usándolos en su programación diaria, aún se encontrará con ella a menudo al leer código de otras personas.

Si tienes alguna pregunta, como siempre, ponte en contacto con nosotros a través de Instagram ❤