Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

372
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!