Saltar al contenido principal
Codigo Heroe
Tarea anterior
Objetos8/25
A la lista de tareas
  1. 1. Una función para lanzar los dados
  2. 2. Pasar los datos de los participantes
  3. 3. Sumar puntos con +=
  4. 4. Crear un objeto
  5. 5. Leer propiedades con la notación de punto
  6. 6. Un arreglo de objetos
  7. 7. Modificar las propiedades de un objeto
  8. 8. Referencias a objetos
  9. 9. Agrupar las reglas en un objeto
  10. 10. Un ciclo para los intentos
  11. 11. Una función para encontrar ganadores
  12. 12. Recorrer los objetos de un arreglo
  13. 13. Buscar la puntuación máxima
  14. 14. Agregar ganadores con push
  15. 15. Detectar un empate general
  16. 16. Construir el mensaje de los ganadores
  17. 17. Agregar participantes y cambiar las reglas
  18. 18. Ajustar el mensaje con condiciones
  19. 19. Devolver un objeto desde una función
  20. 20. Crear y llamar a un método
  21. 21. Leer propiedades desde un método
  22. 22. Un objeto como diccionario
  23. 23. Notación de corchetes
  24. 24. El contexto de la llamada y this
  25. 25. Crear otro objeto con la misma función
Siguiente tarea
  • Matriz de skills
  • Cursos
  • Registro
  • Iniciar sesión

Loading…
En unos segundos, estará listo.

  • Teoría
  • Teoría

Referencias a objetos

Antes de seguir con el juego de dados, veamos en la práctica una característica importante de los objetos.

let firstCat = {
  name: 'Cupcake',
  age: 5
};

let secondCat = firstCat;
console.log(secondCat); // Muestra: {name:"Cupcake", age:5}

firstCat.name = 'Copito';
console.log(secondCat); // Muestra: {name:"Copito", age:5}

No tocamos secondCat, pero al mostrarlo aparece el cambio que hicimos mediante firstCat. ¿Cómo es posible? ¿Eso está permitido?

En JavaScript, sí. Solo hay un objeto: la asignación no crea una copia. Cada variable guarda una referencia al mismo objeto. Si lo modificamos a través de una variable, el cambio también se ve a través de las demás, aunque sean veinte o cuarenta. Al pasar un objeto a una función también se copia esa referencia, no el objeto. Es una característica importante que debemos recordar.

En nuestro programa sucede lo mismo. Creamos el arreglo cats con los objetos de los participantes y lo pasamos a runGame. Dentro de la función lo usamos con otro nombre, players, y modificamos los objetos que contiene. Si mostramos cats al terminar la función, veremos los cambios aunque no hayamos devuelto nada y parezca que trabajamos con otro arreglo.

Este comportamiento puede hacer que el programa sea menos evidente, sobre todo si luego queremos usar el arreglo modificado en otro lugar. Conviene escribir código fácil de seguir. Por eso devolveremos players y asignaremos el resultado a cats para hacer explícito el flujo de datos. Esta asignación no crea una copia: ambas variables siguen apuntando al mismo arreglo.

  • script.js
JavaScript
let diceNumber = 2; let firstCat = { name: 'Cupcake', points: 0 }; let secondCat = { name: 'Rodolfo', points: 0 }; let cats = [firstCat, secondCat]; let runGame = function (quantity, players) { for (let i = 0; i < players.length; i++) { let throwResult = keks.throwDice(quantity, quantity * 6); players[i].points += throwResult; console.log(players[i].name + ' sacó ' + players[i].points); } }; runGame(diceNumber, cats);
Consola

El código ha cambiado, haga clic en "Ejecutar" o active la ejecución automática.

Resultado de la ejecución

ObjetivosRealizado
0
    1. Muestra el arreglo cats en la consola justo antes y justo después de la llamada a runGame.
    2. Después del ciclo, devuelve el arreglo players desde runGame.
    3. En lugar de llamar a runGame sin usar el resultado, asigna ese resultado a la variable cats.
    4. Elimina la primera impresión de cats en la consola.
    Codigo Heroe

    © 2023-2026, codigoheroe.com