En esta conferencia,
vamos a volver a esta palabra clave
y aprenda cómo podemos configurar esta palabra clave manualmente
y también por qué querríamos hacer eso.
Así que digamos que somos una aerolínea otra vez
y en este caso, Lufthansa,
que es el grupo de aerolíneas europeo más grande, por cierto.
Entonces, vamos a crear un objeto muy simple.
para esta aerolínea con un método de reserva muy simple también.
Entonces tenemos el nombre de la aerolínea.
Tenemos el código básicamente.
También queremos mantener una serie de reservas.
Así también dentro del objeto,
y luego el método del libro.
Y recuerda de la sección anterior,
Ahora comenzaré a usar la forma de escribir métodos,
utilizando la sintaxis literal de objeto mejorada.
Y eso es simplemente definiendo el método de esta manera
sin tener que escribir una función.
Así que recuerda, antes de esto,
Solíamos hacer esto, ¿verdad?
Y si aún prefiere esta sintaxis,
todavía puedes hacer este.
Pero en realidad prefiero la nueva sintaxis.
Así que voy a empezar a usar este ahora.
Así que el número de vuelo
y también el nombre del pasajero aquí.
Entonces registremos algo en la consola.
Y nuevamente, esto podría haber sido un código repetitivo aquí
pero también es bueno practicar escribir esto.
Así que esta debería ser una cadena de plantilla en la que se reservó un asiento,
básicamente, queremos imprimir como Jonas reservó un asiento
en vuelo de Lufthansa
y luego el número de vuelo.
Y aquí ahora vamos a obtener el nombre de la aerolínea.
del objeto
Y así ya aprendimos
que para eso, usamos la palabra clave this, ¿no?
Y luego vuelo this.iataCode.
Así que ese va a ser el LH
y luego el número de vuelo en sí
que pasamos a la función.
Así que el número de vuelo.
Entonces, por ahora, esta es solo una buena revisión.
de cómo funciona esta palabra clave, ¿verdad?
Y por supuesto, ahora asumiré que sabes
como funciona todo esto
porque si no tendre que explicar las mismas cosas
una y otra vez.
Y así, como mencioné antes,
solo debes progresar una vez que realmente entiendas
un tema determinado.
De todos modos, ahora usemos la función de libro aquí.
Y usaré el número de vuelo 239
y luego con mi propio nombre.
Y reservemos de inmediato otro vuelo de Lufthansa
pues digamos Mike Smith en el vuelo número 635.
John Smith.
Y ahora, si echamos un vistazo a los resultados,
entonces, de hecho, todo funciona como se esperaba, ¿verdad?
Y entonces es importante entender
que la palabra clave this aquí apunta
al propio objeto lufthansa
porque ese es el objeto
en el que se llamó el método del libro aquí.
Entonces, de nuevo, eso es justo lo que expliqué antes, ¿verdad?
Pero ahora digamos que después de algunos años,
el Grupo Lufthansa creó una nueva aerolínea.
Así que vamos a crear eurowings aquí.
Y luego un objeto muy similar.
Así con la aerolínea, el código.
Y también una matriz de reservas vacía.
¿Bueno?
Ah, y por cierto,
en realidad también queremos nuestro método de libro aquí
para añadir un nuevo objeto a nuestras reservas aquí.
Así que eso es muy importante también.
Así que me olvido de eso.
Así que volvamos aquí.
Así que diremos de nuevo esto
y luego la matriz de reservas
y luego pongamos un nuevo objeto allí
con el vuelo
y entonces eso será esencialmente este.
Así que el código más el número de vuelo.
Y luego también el nombre del pasajero.
Y luego registrémoslo rápidamente en la consola aquí.
Así que this.bookings no es una función
y por supuesto, no lo es.
Necesitamos el método push de hecho.
Y ahora ves que tenemos una matriz
de nuestras dos reservas aquí.
Entonces eso funciona perfectamente.
Pero ahora de todos modos, volviendo aquí a Eurowings,
por supuesto, también queremos poder
aceptar reservas para un vuelo de Eurowings,
así como ser esta aerolínea, ¿verdad?
Ahora, tomando exactamente este mismo método aquí
y simplemente copiándolo y pegándolo aquí
es una mala práctica, ¿verdad?
Así que, por supuesto, no vamos a hacer eso.
Entonces, en su lugar, simplemente tomaremos el método
y almacenarlo en una función externa.
Y luego podemos reutilizar esa función.
para todas las diferentes aerolíneas.
Entonces, lo que quiero decir es crear una nueva función llamada libro
y simplemente lo configuraremos en lufthansa.book, ¿de acuerdo?
Así que de nuevo, esto es posible
porque JavaScript tiene funciones de primera clase.
Y entonces podemos simplemente tomar el valor de esta función aquí.
Así que esa es esta función
y luego almacenarlo en una nueva variable,
que entonces será también la función del libro, ¿de acuerdo?
Ahora, podríamos haber escrito la función aquí también literalmente
pero eso no es necesario.
Lo tenemos aquí
y así que dejémoslo ahí
y asígnalo a reservar aquí mismo.
Bien, intentemos usar esta función de libro
para hacer una nueva reserva ahora.
Pero, ¿qué crees que va a pasar?
Entonces 23, y luego digamos Sarah Williams
y vamos a darle un save
y ahora no podemos leer la propiedad aerolínea de undefined.
Entonces, ¿sabes por qué sucedió esto?
Bueno, es porque esta función aquí,
la función de libro ahora es solo una llamada de función regular
y así como aprendimos en una de las secciones anteriores,
en una llamada de función regular,
la palabra clave this apunta a indefinido,
al menos en modo estricto.
¿Está bien?
Entonces, una vez más, esta función de libro ya no es este método.
¿Bueno?
Simplemente no lo es.
Ahora es esta función separada aquí.
es una copia de este
pero ya no es un método,
ahora es una función.
Y entonces aquí es una llamada de función normal.
Y por lo tanto, la palabra clave this dentro de ella
ahora apuntará a indefinido.
Y es por eso que te seguí diciendo antes
que la palabra clave this depende de cómo la función
en realidad se llama.
Bien, así que asegúrese de entender estas dinámicas aquí.
Pero ahora, ¿cómo solucionamos este problema?
Entonces, en otras palabras, ¿cómo le decimos a JavaScript
que queremos crear una reserva
sobre la nueva aerolínea Eurowings?
O incluso cómo le decimos que queremos
reservar en Lufthansa aquí?
Bueno, básicamente, necesitamos decirle a JavaScript explícitamente
cómo debería ser esta palabra clave aquí.
Si queremos reservar un vuelo de Lufthansa,
esta palabra clave debe apuntar a Lufthansa
pero si queremos reservar un vuelo de Eurowings,
entonces esta palabra clave debe apuntar a Eurowings.
¿Entonces cómo hacemos eso?
¿Cómo le decimos a JavaScript explícitamente?
o manualmente, ¿cómo debería verse esta palabra clave?
Bueno, hay tres métodos de función para hacer eso.
y son llamar, aplicar y vincular.
Entonces, cuando hablamos por primera vez sobre esta palabra clave,
Creo que mencioné estos métodos en ese entonces.
y ahora vamos a usarlos,
al menos los métodos de llamada y aplicación.
Bien, déjame mostrarte cómo.
Entonces, en lugar de solo hacer esto,
que no funciona,
vamos a comentar eso.
No funciona.
Entonces, en su lugar, usamos book.call, ¿de acuerdo?
Y recuerda que una función es realmente solo un objeto
y los objetos tienen métodos
y por lo tanto, las funciones también pueden tener métodos
y el método de llamada es uno de ellos.
Y en el método de llamada,
el primer argumento es exactamente
a lo que queremos que apunte esta palabra clave.
Así que digamos que queremos un vuelo de Eurowings
y luego, como de costumbre,
el resto de los argumentos.
Así que 23 y Sarah Williams.
¿Está bien?
Y luego registremos en la consola también el objeto eurowings.
Ejecutemos esto y luego lo explicaré un poco mejor.
lo que acaba de suceder.
Pero, de hecho, ahora tenemos la matriz de reservas
y ahí tenemos el objeto
con el EW23 y así EW viene de aquí.
Así que exactamente del objeto eurowings
y luego también, por supuesto, el nombre.
Y nuevamente, está dentro de la matriz de reservas.
del objeto Eurowings.
Así que recapitulemos lo que sucedió aquí.
Así que esta vez, en realidad lo hicimos
no llamemos a la función del libro nosotros mismos.
En su lugar, llamamos al método de llamada
y es entonces este método de llamada,
que llamará a la función libro
con la palabra clave this establecida en eurowings.
Así que lo que sea que pasemos tiene el primer argumento
del método de llamada.
Y entonces esto nos permite manualmente
y establezca explícitamente esta palabra clave
de cualquier función que queramos llamar.
Entonces todos los argumentos después del primero
son simplemente los argumentos de la función original.
Y así, en el caso de la función de libro,
por supuesto, ese es el número de vuelo
y el nombre del pasajero.
Y, por supuesto, ahora podemos hacer lo mismo también para Lufthansa.
Así que book.call, esta vez con lufthansa
y reservemos a alguien más en el vuelo 239.
digamos mary cooper
y volvamos a registrar el objeto lufthansa
pero hagámoslo ahora aquí.
Y, de hecho, la cadena que obtenemos aquí
es completamente correcto
y aquí, en la matriz de reservas de Lufthansa,
ahora tenemos, por supuesto, tres reservas.
¿Bueno?
Y eso, por supuesto, sucedió porque esta vez,
configuramos esta palabra clave dentro
de la llamada de función a lufthansa.
Y ahora esto aquí vuelve a señalar a Lufthansa,
mientras antes, aquí mismo,
estaba siendo apuntado a Eurowings, ¿de acuerdo?
Entonces, aunque el código de esta función
está dentro del objeto lufthansa,
lo hicimos para que esta palabra clave esté aquí
señaló a eurowings.
Así que a este objeto, este nuevo de aquí, ¿de acuerdo?
Así que tenemos una manera ahora
de manipular manualmente la palabra clave this
utilizando el método de llamada.
Y por supuesto, ahora podríamos seguir
y crear más aerolíneas en el Grupo Lufthansa,
como Swiss Air Lines.
Aerolíneas.
Ahora, por supuesto, estos nombres de propiedad,
todos deben tener exactamente el mismo formato
como este objeto original aquí
porque este método intenta leer solo estas propiedades.
Entonces siempre es iataCode
y reservas, como ves aquí, y aerolínea.
Y por supuesto,
necesitamos usar exactamente estos nombres de propiedad aquí también
pero así,
ahora podemos seguir adelante
y utilice nuestra función de libro en Swiss Air Line.
Y entonces, esta vez, estableceremos la palabra clave this
en el libro. Llame al objeto suizo.
583 y reservemos otro vuelo para Mary Cooper aquí.
Y efectivamente, volvió a funcionar.
Así que aquí está la reserva de nuevo.
¿Bueno?
Hay algo extraño aquí
y entonces oh, en realidad aquí,
también tiene que ser una aerolínea.
Te estaba diciendo que necesitas usar los mismos nombres de propiedad
y ni siquiera lo estaba haciendo yo mismo.
Así que tiene que ser una aerolínea, como lo es aquí.
y lo mismo aquí también.
Y ahora la cadena es, por supuesto, correcta aquí.
Bueno.
Permítanme agregar un comentario aquí.
Método de llamada porque, de hecho,
hay un método similar al método de llamada,
que se llama el método de aplicación.
Y el método de aplicación hace básicamente exactamente lo mismo.
La única diferencia es que se aplican
no recibe una lista de argumentos
después de esta palabra clave,
por lo que no recibe esta lista aquí
pero en cambio, tomará una matriz
de los argumentos, ¿de acuerdo?
Y entonces tomará los elementos
de esa matriz y pásela a la función.
entonces digamos
datos de vuelo,
así que voy a crear rápidamente una matriz aquí
con el número de vuelo y el nombre del pasajero.
Así que reserve en el mismo vuelo George Cooper
y ahora podemos usar aplicar en la función de libro.
Así que aplica.
Y luego, al igual que aquí en el método de llamada,
el primer argumento es la palabra clave this.
Pero ahora el segundo argumento,
tiene que ser, como acabo de decir, una matriz de datos.
Así que pasemos la matriz de datos de vuelo aquí.
Pero entonces echemos un vistazo.
De hecho, me quedo con este de aquí.
Y así de hecho, aquí funcionó de nuevo.
¿Está bien?
Este método de aplicación ya no se usa
en JavaScript moderno porque ahora,
en realidad tenemos una mejor manera de hacer exactamente lo mismo.
¿Y sabes de lo que estoy hablando?
Así que déjame mostrártelo.
Book.call, así que en lugar de aplicar,
Todavía podemos usar la llamada,
otra vez con suiza
y luego podemos simplemente usar el operador de propagación
para sacar los datos de flightData
y básicamente ponerlos aquí.
Así que esto aquí es lo mismo que este.
Y ahora mismo, con JavaScript moderno,
Prefiero usar siempre el método de llamada
y luego distribuya los argumentos de una matriz como esta.
De nuevo, esto aquí es exactamente lo mismo que esto.
En resumen, ahora tenemos otra herramienta
en nuestra caja de herramientas aquí
y este es uno que nos permite
para definir explícitamente la palabra clave this
en cualquier función que queramos.
Pero en realidad hay otro método
que nos permite hacer lo mismo
y ese es el método de enlace.
Es más importante en realidad
que los métodos de llamada y aplicación,
así que lo dejaré para la próxima lección.