< Return to Video

Herencia en Objetos (Versión en Video)

  • 0:01 - 0:03
    Estamos de regreso con nuestro programa para crear "Winstons"
  • 0:03 - 0:09
    pero añadí un nuevo tipo de objeto "Hooper" porque "Hooper" se sentía un poco solo.
  • 0:09 - 0:12
    Ahora, defino a "Hooper" de la misma manera que definí a "Winston", ya sabes,
  • 0:12 - 0:16
    empezando con la función constructora y tomando las mismas propiedades y luego "draw" (dibujar)
  • 0:16 - 0:20
    y luego "talk" (hablar), y luego también añadí otro método
  • 0:20 - 0:25
    llamado "Horray" porque a los "Hoppers" realmente le gusta celebrar y a los "Winstons" en realidad no.
  • 0:25 - 0:28
    Ahora, al final de la función he creado
  • 0:28 - 0:31
    dos nuevos objetos "Hooper": "Little Hopper" y "Big Hooper",
  • 0:31 - 0:37
    los dibujo y en uno llamo la función "talk" y en el otro "Horray".
  • 0:37 - 0:38
    Eso está muy bien.
  • 0:38 - 0:40
    Ahora, si miramos este código que está aquí arriba
  • 0:40 - 0:42
    te darás cuenta de algo interesante.
  • 0:42 - 0:49
    Y es que el código para "Hooper" es muy similar al código para "Winston". Particularmente el constructor.
  • 0:49 - 0:55
    No se si recuerdes pero básicamente es el mismo código que nuestra función constructora de"Winston".
  • 0:55 - 1:01
    Y luego en esta función "talk" el código es exactamente el mismo que en la función "talk" de "Winston",
  • 1:01 - 1:04
    y ambos tienen funciones "draw",
  • 1:04 - 1:07
    así que tienen muchas cosas en común en estos dos tipos de objetos,
  • 1:07 - 1:11
    y eso tiene sentido porque ya sabes "Hooper" y "Winston" son dos tipos de objetos muy similares
  • 1:11 - 1:15
    en nuestro mundo. Si piensas en eso, ya sabes, en el mundo real
  • 1:15 - 1:20
    fuera de la computadora, muchos tipos de objetos tienen semejanzas
  • 1:20 - 1:21
    con otros tipos de objetos.
  • 1:21 - 1:25
    Como en el reino animal. Todos los animales son similares de alguna forma.
  • 1:25 - 1:29
    Y luego tenemos diferentes tipos de animales como los humanos.
  • 1:29 - 1:32
    Y los humanos comparten esas similitudes
  • 1:32 - 1:34
    pero también tiene sus propias similitudes únicas.
  • 1:34 - 1:36
    Así que podríamos decir que
  • 1:36 - 1:42
    un animal es un tipo de objeto del que el tipo de objeto humano hereda funcionalidad.
  • 1:42 - 1:47
    No iniciamos completamente de cero sino que agregamos a la funcionalidad que ya tenemos de ser un animal.
  • 1:47 - 1:49
    Como que todos los animales hacen ruidos,
  • 1:49 - 1:51
    pero los humanos también tienen lenguaje.
  • 1:51 - 1:54
    Así que este concepto de herencia de objetos
  • 1:54 - 1:56
    en realidad también es muy útil en programación.
  • 1:56 - 2:00
    Y podemos crear una cadena de herencia de objetos en nuestro Javascript.
  • 2:00 - 2:03
    Así que para hacer esto cuando piensas
  • 2:03 - 2:04
    qué es lo que comparten nuestros tipos de objetos,
  • 2:04 - 2:07
    y tienes un nombre para ello,
  • 2:07 - 2:09
    porque vamos a crear un tipo de objeto
  • 2:09 - 2:11
    que representa el objeto base
  • 2:11 - 2:14
    así que vamos a llamarle "Creatures" (criaturas). Ambos son criaturas.
  • 2:14 - 2:18
    Así que decimos "var Creature = ". Y ahora necesitamos nuestra función constructora.
  • 2:18 - 2:23
    Así que solamente vamos y copiemos la de "Hopper" para que tenga lo mismo que "Winston" tiene.
  • 2:23 - 2:24
    Muy bien.
  • 2:24 - 2:27
    Y luego, vamos a ver.
  • 2:27 - 2:28
    Ahora queremos,
  • 2:28 - 2:29
    ¿Qué es lo que queremos ahora?
  • 2:29 - 2:33
    Tal vez queremos añadirle la función "talk".
  • 2:33 - 2:40
    Así que para la función "talk", sólo la copiamos de "Hooper". Pero por supuesto necesitamos que diga "Creature.prototype" en lugar de esto.
  • 2:40 - 2:41
    Ok, genial.
  • 2:41 - 2:46
    Así que ahora tenemos este tipo de objeto "Creature".
  • 2:46 - 2:49
    Pero en realidad necesitamos decirle a "Hooper" que
  • 2:49 - 2:53
    "Hooper" debe basar su funcionalidad en "Creature".
  • 2:53 - 2:55
    Así que podemos hacer eso escribiendo esta línea aquí.
  • 2:55 - 3:03
    Decimos "Hopper.prototype = Object.create"
  • 3:03 - 3:05
    "(Creature.prototype);"
  • 3:05 - 3:10
    Entonces, lo que hace esta línea es decirle a Javascript que base el prototipo de "Hopper", es decir,
  • 3:10 - 3:15
    toda la funcionalidad de "Hopper" en el prototipo de "Creature".
  • 3:15 - 3:22
    Y entonces esto significa que cada vez que busque una función en "Hooper" buscará primero en el prototipo de "Hooper"
  • 3:22 - 3:27
    pero si no lo encuentra lo buscará en el prototipo de "Creature".
  • 3:27 - 3:30
    Y esto es a lo que llamamos cadena de prototipos.
  • 3:30 - 3:34
    Ahora una vez que hemos hecho esto deberíamos poder borrar la función "talk".
  • 3:34 - 3:35
    En "Hooper".
  • 3:35 - 3:37
    Porque ya existe en "Creature".
  • 3:37 - 3:40
    Que está más arriba en la cadena de prototipos.
  • 3:40 - 3:42
    ¿Listo? ¡Tan tan tan!
  • 3:42 - 3:43
    ¡Funcionó!
  • 3:43 - 3:49
    Y funcionó porque encuentra la función en el prototipo de "Creature".
  • 3:49 - 3:54
    Mmm. Así que tratemos de borrarla de "Winston" también.
  • 3:54 - 3:58
    Ok. No funcionó, nos dice que el objeto no tiene método "talk".
  • 3:58 - 4:01
    ¿Y por qué es eso? Bueno, tenemos nuestro constructor de "Winston",
  • 4:01 - 4:03
    y "draw" y borramos la función "talk".
  • 4:03 - 4:07
    Bueno, notarás que en realidad olvidamos decirle que el prototipo de "Winston" debe estar basado
  • 4:07 - 4:08
    en el prototipo de "Creature".
  • 4:08 - 4:10
    Así que necesitamos esa línea tan importante.
  • 4:10 - 4:14
    "Winston.prototype = Object.create"
  • 4:14 - 4:18
    "(Creature.prototype);"
  • 4:18 - 4:19
    ¡Tan tan!
  • 4:19 - 4:21
    Y fíjense en algo importante.
  • 4:21 - 4:25
    Tengo esta línea después de la función constructora pero antes de añadir cualquier cosa
  • 4:25 - 4:27
    al prototipo de "Winston".
  • 4:27 - 4:29
    Eso es lo que generalmente quieres hacer.
  • 4:29 - 4:31
    Quieres decírselo inmediatamente cuando empiezas
  • 4:31 - 4:34
    en esto se basa tu prototipo inicial.
  • 4:34 - 4:37
    Pero luego seguimos añadiendo más cosas al prototipo.
  • 4:37 - 4:42
    Porque habrá alguna cosa que es única a los "Winstons" o única a los "Hoopers"
  • 4:42 - 4:43
    que no tiene los "Creatures".
  • 4:43 - 4:46
    Y es genial que puedas definir esas cosas.
  • 4:46 - 4:50
    Muy bien. Ahora, si miramos esto, todavía tenemos código repetido.
  • 4:50 - 4:51
    El código constructor.
  • 4:51 - 4:54
    ¿Cierto? Tenemos todo esto tres veces.
  • 4:54 - 4:58
    ¿Podríamos simplemente borrarlo?
  • 4:58 - 5:01
    Tratemos.
  • 5:01 - 5:04
    Ok, mmm. No parece haber funcionado.
  • 5:04 - 5:08
    Porque nuestro "Hooper" aparece en la esquina superior izquierda, parece que olvidó todo sobre él.
  • 5:08 - 5:16
    Y esto es porque Javascript no asume que quieres el mismo constructor incluso si quieres basar el prototipo en él.
  • 5:16 - 5:19
    Ya sabes, te permite definir tu propio constructor para esos objetos.
  • 5:19 - 5:26
    Pero también te da una forma fácil de llamar al constructor de un objeto.
  • 5:26 - 5:28
    Así que la forma en que haremos esto es
  • 5:28 - 5:37
    escribiendo "Creature.call(this, nickname, age, x, y);"
  • 5:37 - 5:41
    Ahora, lo que esto hace (Nota que funcionó. Sí), lo que hizo es
  • 5:41 - 5:44
    que en realidad está llamando a la función "Creature", la función constructora.
  • 5:44 - 5:50
    Está llamando esa función pero está pasando y está diciendo: "ok, debes llamar la función constructora como
  • 5:50 - 5:54
    si la estuviera llamando este objeto 'Hooper'
  • 5:54 - 5:57
    y como si la estuviera llamando con estos argumentos".
  • 5:57 - 5:59
    Estos son argumentos con los que se llamó "Hooper".
  • 5:59 - 6:04
    Y terminará ejecutando este código como si estuviera justo aquí.
  • 6:04 - 6:06
    Y es exactamente lo que queremos. Y funcionó.
  • 6:06 - 6:08
    Y podemos continuar y
  • 6:08 - 6:12
    copiar esta línea en la función constructora
  • 6:12 - 6:15
    de "Winston" también.
  • 6:15 - 6:17
    Y funcionó. ¡Sí!
  • 6:17 - 6:22
    Muy bien. Revisemos esto. Hemos encapsulado todas nuestras propiedades compartidas y funcionalidades
  • 6:22 - 6:25
    en este tipo de objeto base, "Creature".
  • 6:25 - 6:28
    Y hemos hecho dos tipos de objeto que provienen de este tipo de objeto base.
  • 6:28 - 6:31
    Ellos heredan la funcionalidad pero añaden la suya propia también.
  • 6:31 - 6:36
    Y lo interesante de esto es que podemos cambiar la funcionalidad compartida en un sólo lugar.
  • 6:36 - 6:41
    Como si quisiéramos cambiar la edad de nuevo, podríamos decir más "years old" (años de edad).
  • 6:41 - 6:44
    Ahora todos tienen "years old" al final.
  • 6:44 - 6:53
    O podríamos cambiar la función "talk" y poner "SUPPP!?!?!?!?". Y ahora los "Winstons" y los "Hoopers" dirán "SUP".
  • 6:53 - 6:57
    Entonces, ahora has visto como crear tipos de objetos y heredar de los tipos de objetos,
  • 6:57 - 7:01
    puedes empezar a pensar cómo sería útil esto en tus dibujos, animaciones, simulaciones y juegos.
  • 7:01 - 7:05
    Por ejemplo, tal vez tienes un juego y tienes muchos tipos de personajes en él,
  • 7:05 - 7:07
    y todos ellos pueden correr pero sólo algunos de ellos pueden saltar.
  • 7:07 - 7:12
    Ese es un lugar perfecto para usar algunos tipos de objetos y algo de herencia.
  • 7:12 - 7:16
    Pero apuesto a que puedes pensar en muchas más formas de hacerlo.
Title:
Herencia en Objetos (Versión en Video)
Description:

more » « less
Video Language:
English
Duration:
07:17

Spanish, Mexican subtitles

Revisions