Ahora que entiendes los fundamentos de Javascript, quiero enseñarte una forma genial de usar Javascript.
Algo que llamamos "Programación Orientada a Objetos"
Pero primero debemos entender porqué es realmente útil.
Así que puse aquí un programa que quedará mejorado una vez que lo hagamos más orientado a objeto.
Ahora, éste es un buen programa para empezar. En la parte superior, tenemos dos variables que almacenan literales de objeto.
Los literales de objeto son un tipo de objetos que aprendimos antes y que creamos con dos llaves ({}),
y dentro de las cuales ponemos la información de los nombres y valores de las propiedades.
Así que aquí tenemos dos de esas variables literales de objeto, y aquí abajo tenemos esta función "drawWinston",
que espera recibir un argumento simple,
y después dibuja el argumento: dibuja una imagen basada en la "x" y "y" que son propiedades del objeto,
y luego un título basado en el sobrenombre y la edad que son propiedades del objeto.
Y finalmente hasta abajo, llamamos la función "drawWinston()" para el adolescente y para el adulto,
que es lo que hace que se muestren.
Muy bien. Ahora si vamos de este lado y vemos estas literales de objeto,
fíjense que se ven muy similares.
Las dos tienen el mismo conjunto de propiedades, y las dos pueden ser usadas por la misma función "drawWinston()".
De hecho, si piensas en esto, las dos están describiendo un tipo de "Winston", ¿cierto?
Y podríamos pensar que existe algo así como un tipo abstracto de "Winston" en el mundo,
y que cada "Winston" tiene el mismo conjunto de propiedades como un sobrenombre ("nickname"), edad ("age"), una "x" y una "y",
y aquí, hemos creado dos instancias de "Winston"
para describir un "Winston" particular. Éste es un "Winston" adolescente, y éste es un "Winston" adulto.
Pero los dos en realidad son muy similares, y hay muchas cosas que son similares entre ellos.
Y si lo piensas bien, así es como funciona el mundo, tenemos tipos de datos abstractos como seres humanos y gente,
y cada uno de nosotros somos instancias específicas de ellos con nuestras propias pequeñas propiedades.
Ahora, podemos usar técnicas orientadas a objetos en Javascript de tal forma que estas variables de "Winston"
sean instancias formales del objeto "Winston", de manera que ellos sepan que están compartiendo cosas en común.
Entonces, para hacer eso, en primer lugar tenemos que describir este tipo de dato abstracto llamado "Winston".
Y lo haremos con una variable.
Almacenaremos el tipo de dato en una variable. Así que "var Winston" y usaremos "W" mayúscula porque debemos iniciar nuestros objetos con mayúscula,
y lo igualaremos a una función.
Y esta función es una función especial que llamamos "función constructora",
porque vamos a llamar esta función cada vez que queramos crear una nueva instancia de "Winston".
Así que si queremos crear un "Winston" adolescente llamaremos esta función y si queremos crear un "Winston" adulto llamaremos esta función.
Esto significa que esta función debe tomar cualquier argumento que necesite saber para crear un "Winston" completo.
En este caso necesita conocer el sobrenombre ("nickname"), la edad ("age"), la "x" y la "y".
Ahora, una vez que tenemos esos argumentos, vamos a hacer algo con ellos,
tenemos que ligar esa información al objeto "Winston".
Para eso usaremos una nueva y especial palabra clave: "this". Y "this" se referirá a la instancia actual del objeto.
Así que escribimos "this.nickname", y esto significa que la propiedad "nickname" de este objeto es igual a
lo que sea que le pasemos a la función constructora, ¿ok?
Y "this.age" es igual a lo que le pasemos en "age", "this.x" es igual a la "x" que le pasemos, y "this.y"
es igual a la "y" que le pasemos.
Muy bien, ahora tenemos este tipo de dato abstracto llamado "Winston", y tiene una función constructora que podemos usar para crear un nuevo "Winston".
Así que probemos.
Vamos a crear un "winstonTeen" de nuevo, pero esta vez vamos a decir "winstonTeen" es igual,
y en lugar de poner llaves, vamos a escribir "new Winston".
Así que estamos diciendo que vamos a crear una nueva instancia de "Winston",
y vamos a pasar la información que necesita, "Winsteen", 15, 20, 50, ¿ok?
Y entonces podemos borrar este código anterior porque ya no lo necesitamos.
¿Correcto? Ahora hemos creado un nuevo "Winsteen".
Y ahora podemos decir "winstonAdult" es igual a "new Winston"
y por supuesto, su nombre es "Mr. Winst-a-lot", un nombre lindo,
tiene 30 años, y está en 229 y 50. ¿Cierto? Y entonces podemos borrar este literal de objeto.
¡Tan tan! Nuestro código sigue funcionando.
Lo que hicimos aquí fue hacer un tipo de dato abstracto que es este "Winston"
y podemos crear una nueva instancia de "Winston" que tenga esas propiedades que son únicas para ellos.
Y tenemos que recordar las propiedades que tiene.
Recordar es muy importante. Aquí tenemos "this.nickname" y "this.age",
si accidentalmente no ponemos este "this.age", fíjense que nos marca "undefined".
Y eso es porque aquí abajo, la función "drawWinston",
espera lo que el objeto le pase, espera tener algo en la propiedad edad.
Y si no escribimos "this.age",
entonces no va a tener esta propiedad, ¿ok? Se la pasamos en la función constructora
pero no hicimos nada con ella, en realidad tenemos que adjuntarla al objeto usando la palabra clave"this".
Así que lo arreglamos.
Ahora probablemente estés pensando, "ok, estás haciendo que este código funcione y estás haciendo estas cosas interesantes,
pero, en realidad sólo hemos logrado lo mismo que teníamos antes".
Bueno, aquí hay algo genial. Ahora todos nuestros "Winstons" pasan por la misma función constructora.
Y podemos cambiar las cosas, si queremos cambiar algo de "Winston"...
de todos los "Winstons", sólo cambiamos aquí dentro. Así que probablemente queramos modificar aquí y escribir "years old" ("años de edad").
Podemos poner esto aquí, y ahora todos los "Winstons" dicen "15 years old", "30 years old", ¿cierto?
Así que están tomando la parte que es única de cada uno de ellos pero también tienen cosas que comparten.
Y lo que es realmente interesante sobre la programación orientada a objetos es la idea de que
hay este tipo de objetos en el mundo, y puedes crear instancias de esos objetos
y que hay cosas que son similares entre ellos como tener las mismas propiedades,
pero hay cosas que son diferentes como el valor de las propiedades de cada uno, ¿cierto?
Pero podemos hacer el mismo tipo de cosas con ellos, como llamar las mismas funciones
y usarlos en formas similares. Así que éstas son algunas de las cosas geniales que podemos hacer con la programación orientada a objetos,
pero como te vas a dar cuenta, hay muchísimas cosas más que puedes hacer.
¡Así que sigue atento!