Echemos un vistazo a las funciones de flecha de ES6 . Si ha pasado una cantidad de tiempo programando JavaScript, sabe que después de un tiempo, se siente como si estuviera escribiendo esa palabra clave de función una y otra y otra vez. Escribe una función aquí, escribe una función allí. Aquí una función, allí una función, en todas partes una función función. Esto se debe a que cada vez que desee que suceda algo en su secuencia de comandos, ¡debe escribir otra función! ¿Alguna vez has pensado, "sería bueno si no tuviera que escribir la palabra clave de función con tanta frecuencia". Si es así, tiene suerte con ES6, porque hay una nueva forma abreviada para escribir funciones y se las conoce como funciones de flecha ES6 . Investigámoslos un poco ahora.
Las funciones de flecha usan la sintaxis Fat Arrow
Es posible que haya oído hablar de estas nuevas funciones de flecha como el uso de la sintaxis de flecha gruesa . Esto se debe a que este nuevo símbolo para definir funciones en ES6 es la combinación de un signo igual =
y un símbolo mayor que >
. Póngalos juntos y ahora tiene su flecha gorda =>
. El signo igual es lo que engorda a la flecha. Así que comencemos creando una función en ES5, y luego veamos qué tenemos que hacer para convertirla en una función de flecha de ES6.
Aquí hay un ejemplo de una función de suma simple en ES5
Podemos reescribir esta función usando flechas gruesas =>
en un par de pasos.
- 1. Elimina la
function
palabra clave a la izquierda de los argumentos de la función. - 2. Inserta una flecha ancha a la derecha de los argumentos de la función.
Tu primera función de flecha
¡Felicidades! ¡Acaba de crear su primera función de flecha en ES6! Demos un paso más.
Puede omitir la return
palabra clave para expresiones simples colocando todo en una línea y eliminando los corchetes o llaves como tal.
Finalmente, si solo hay un argumento para la función, incluso puede dejar el paréntesis así.
Ahora tiene menos posibilidades de desarrollar el síndrome del túnel carpiano debido al estrés repetitivo de la función de mecanografía.
Las funciones de flecha sin entrada deben usar paréntesis
En este ejemplo a continuación, creamos una función de flecha súper simple y la asignamos a la points
variable. En contraste con el ejemplo anterior donde cuadramos un número a través de una función y requiere un número como parámetro, esta función aquí no tiene parámetro. Si no hay ningún parámetro para una función de flecha, debe utilizar la sintaxis de paréntesis vacía.
Captura de pantalla de la función de flecha resaltada
Esta captura de pantalla resalta el área en el código que forma la función de flecha. Tenga en cuenta la falta de parámetros, declaración de retorno o llaves.
Cerrar una llamada a la función de flecha
Si desconectamos el valor de una llamada a la points()
función, podemos ver que obtenemos el resultado de 100
. Verá, el código está manejando la devolución del valor por nosotros, no necesitamos especificarlo manualmente escribiendo la return
palabra clave.
Ejemplo de función de flecha de argumento único
La única vez que no puede usar paréntesis es cuando hay un argumento para una función de flecha. Esto puede resultar un poco confuso. Si prefiere seguir una convención de solo usar el paréntesis en todos los casos de uso de una función de flecha ES6, puede hacerlo. Este ejemplo aquí de una función de flecha ES6 de un argumento funciona bien cuando incluimos el paréntesis.
La misma función funciona de la misma manera si omitimos el paréntesis.
Otro ejemplo de múltiples argumentos usando paréntesis
Hacer uso de bloques o corchetes con funciones de flecha
Las funciones de flecha de una sola línea son perfectas para expresiones simples. La mayoría de las veces, necesitará utilizar funciones que hagan más que una simple expresión que pueda caber en una línea. En ese caso, ciertamente puede hacer uso de corchetes como está acostumbrado a hacer al definir funciones. Una cosa clave para recordar al usar corchetes con funciones de flecha: debe incluir la return
palabra clave para devolver un valor de su función. La devolución de un valor no sucederá automáticamente como sucedería con una función de flecha de una sola línea. Mantén esto en mente.
Función de flecha de varias líneas resaltada
Donde la Flecha Gorda no tiene sentido
Ahora que está familiarizado con las flechas gruesas y cómo escribir menos, mientras hace que su código sea más conciso, probablemente esté listo para eliminar todo rastro de una function
palabra clave en cualquier proyecto en el que esté trabajando. Vaquero no tan rápido. Las flechas gordas no tienen sentido en todas partes. Por lo general, evitará el uso de la flecha gruesa en las funciones del constructor, así como en las extensiones de los prototipos. Si está utilizando ES6, es probable que utilice la sintaxis de la clase de todos modos, por lo que no tendrá que preocuparse demasiado por eso. Sin embargo, es un buen punto a tener en cuenta.
this
es diferente en ES6 vs ES5!
Es probable que esté muy familiarizado con cómo funciona esto en ES5. Para ser honesto, es bastante confuso y hay una gran cantidad de reglas que determinan lo que this
realmente apunta en un momento dado en su código JavaScript. Las funciones de flecha en ES6 toman todas las reglas de cómo usar this
en ES5 y las arrojan por la ventana. En ES6, las funciones de flecha vienen con enlace de contexto automático . El objetivo de esto es, con suerte, facilitar el uso de la this
palabra clave, ya que ya no debería tener que preocuparse tanto por el enlace de contexto. Considere este fragmento de código ES5 adjuntando un evento de clic al documento.
En ES5, cada vez que tenemos un controlador de eventos en nuestro código, this
se establece en el elemento que recibe el evento. Esto resulta en no tener acceso al contexto de la función.
Ahora cambiemos este código para hacer uso de una función de flecha y veamos cómo afecta esto this
.
Esta vez, dado que estamos usando una función de flecha, this
se establece en el objeto Ventana global ya que estamos en el ámbito global. No estamos en el contexto de una función. Con la función de flecha, se this
refiere al contexto real del código que estamos ejecutando.
Llevando esta idea un poco más allá, veamos las funciones de llamada que existen en los objetos en ES5 vs ES6.
Esto muestra que en este ejemplo, this
se está configurando el objeto en el que se llama a la función.
¿Qué sucede si cambiamos esto para usar una función de flecha? Veamos.
Con la función de flecha en su lugar, obtenemos el contexto del código que estamos ejecutando. O en otras palabras, ¿en qué ámbito está operando este código en particular? En este caso es el alcance global, por lo tanto obtenemos el objeto Ventana global ya que este es el que representa el alcance global.
Contexto de función en ES6
Este ejemplo es un objeto literal que tiene un servicenumber
valor y una función de proceso. Esa función de proceso, en realidad, devuelve una función. Luego llamamos a la función de proceso e inmediatamente llamamos a la función devuelta. Esto es lo que se entiende por bill.process () (); Entonces, ¿qué está sucediendo this
dentro de la función devuelta? Bueno, la función de flecha se está ejecutando dentro del contexto de otra función, y es por eso que vemos el valor de en this.servicenumber
lugar del objeto de ventana global.
bind
no funciona con las funciones de flecha!
Llevando el código anterior un paso más allá, creamos otro objeto literal que también tiene una servicenumber
propiedad. Es posible que esté familiarizado con la llamada al bind()
método en ES5 para establecer el contexto que elija. Probémoslo aquí con una función de flecha.
¡Ahora mira eso! Pensarías que servicenumber
lo sería 900
, ya que intentamos vincular el newBill
objeto literal a nuestra función de proceso. Sin embargo, esto no funciona con las funciones de flecha ES6. Esto no produjo ningún error ni nada, por lo que si no supiera nada mejor, no tendría ni idea de por qué bind()
estaba fallando. Con las funciones de flecha ES6, no puede utilizar bind()
.
Al igual que en el ejemplo anterior, ¡hacer uso de call()
tampoco funciona!
Con ES6 flecha funciones, utilizando bind()
, call()
y apply()
, son todos inútiles! No se puede cambiar el valor de this
.
Las flechas gordas no pueden ir en una nueva línea.
Aquí hay solo un consejo rápido sobre la sintaxis de las funciones de flecha. No puede colocar la flecha gruesa en una nueva línea o el script fallará.
Deberá mantener la flecha gruesa en la misma línea y estará bien.
Las funciones de flecha no tienen prototipo
Otra cosa interesante a tener en cuenta con las funciones de flecha es que no tienen propiedad de prototipo. Las funciones declaradas mediante la palabra clave function tienen una propiedad de prototipo.
Veamos algunos ejemplos del uso de la nueva sintaxis de clase en ES6. Estos dos primeros ejemplos hacen uso this
, pero no en el contexto de una función de flecha. Esto es solo para familiarizarnos con la sintaxis antes de probar this
dentro de una función de flecha en un código más complejo.
Uso de la función ES5 en la función de registro
Usar una función de flecha en la función de registro
En los dos ejemplos anteriores, obtenemos el mismo resultado si estamos usando funciones ES5 de funciones de flecha ES6 en la función de registro. Cada tipo no hace uso de la this
palabra clave, por lo que es de esperar.
Ahora cambiemos las cosas para hacer uso de la this
palabra clave dentro de la función de registro para ver qué sucede.
Tenga this
en cuenta que dentro de la función de registro es ahora undefined
.
¿Qué tal si lo convertimos en una función de flecha ES6? Veamos qué pasa.
En este ejemplo anterior, se this
refiere a cada instancia del GamesCollection
Objeto a medida que las recorre.
Prueba this
contra diferentes instancias de un objeto
Veamos un ejemplo más de cómo this
está vinculado en las funciones de flecha frente a las funciones de ES5. A continuación, configuramos un constructor para un idioma. Luego ampliamos el prototipo de Language con una función greet (). Esta función simplemente cierra la sesión de su nombre después de un breve retraso.
¡Agradable! En este primer ejemplo, estamos usando una función de flecha y cuando llamamos a la función de saludo en dos objetos diferentes, this
automáticamente apunta a la instancia correcta.
Eliminemos ahora la función de flecha y reemplácela con una función de estilo ES5. Obtenemos resultados diferentes.
Ahora, el código se rompe porque this
ahora apunta al objeto de ventana global, en lugar de cualquier instancia de Language.
Para solucionar este problema en ES5, tuvimos que utilizar bind()
like so
El código ahora vuelve a funcionar cuando se utilizan funciones de ES5 y bind()
.
Tutorial de la función de flecha de ES6
¡Felicitaciones, ahora eres un jefe en el uso de funciones de flecha en ES6! Bueno, tal vez todavía no sea el modo jefe, pero este tutorial cubrió mucho de lo que necesitará saber para hacer un buen uso de las funciones de flecha en su código ES6. ¿Cuáles son los puntos principales? Los casos de uso de flechas gordas son azúcar sintáctico y una forma más compacta de escribir funciones. En ES6, funciones de dirección automática vienen con marco vinculante, que debe ayudar con no tener que preocuparse por mantener la unión contexto manualmente a través de bind()
, call()
o apply()
. En funciones de constructor y extensiones de prototipo, no tiene sentido utilizar la sintaxis de flecha gruesa. Puede seguir utilizando la palabra clave de función en esos escenarios.
0 Comentarios