Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

380
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda