Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

374
Vistas
¿Cómo crear y devolver un objeto privado dentro de una función de fábrica?
const module = (function() { let _priv = {a:1}; return { get priv() {return _priv} } })(); let obj = module.priv; obj.b = 2; console.log(module.priv); //{a:1, b:2}

Usando una función de fábrica (o un patrón de módulo revelador en este caso), ¿cómo 'obtengo' un objeto privado como referencia pero que sea inmutable?

Un ejemplo más práctico es para un juego de tres en raya:

 const gameBoard = (function() { let _board = (new Array(9)).fill(''); //want it to be immutable from the outside const add = (index,mark) => { _board[index] = mark; } const getBoard = () => {return _board} return {add, getBoard} })();

Quiero que _board solo se cambie con el método add(), pero también quiero una referencia al estado del tablero en otros lugares del código. Pero con este código actual el tablero queda expuesto y puede ser alterado.

about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

¿No sería suficiente devolver una copia superficial?

así que en lugar de

 {return _board}

Podrías hacerlo

 {return [..._board]}

así que en tu ejemplo se vería así

 const gameBoard = (function() { let _board = (new Array(9)).fill(''); //want it to be immutable from the outside const add = (index,mark) => { _board[index] = mark; } const getBoard = () => {return [..._board]} return {add, getBoard, _board} })(); console.log(gameBoard._board) console.log(gameBoard.getBoard()) console.log(gameBoard._board === gameBoard.getBoard())

al ejecutar el código, verá que _board y la matriz devuelta por getBoard() no hacen referencia al mismo objeto... por lo que cambiar la matriz, obtendrá al usar getBoard() no tiene ningún efecto en su tablero real.

Y una vez que eliminó _board de la devolución (lo agregué para poder hacer la comparación fuera de la función), no veo una forma de obtener acceso a _board desde fuera de la función

about 4 years ago · Santiago Gelvez Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda