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

177
Vistas
¿Cómo evitar que las matrices de constructores de funciones se editen a través de métodos de obtención en JavaScript?

tengo este codigo

 function State(){ const SecretState = { name: 'bob' } this.getState = () => SecretState; this.setState = (name) => SecretState.name = name; } const m = new State() m.setState('Smith') m.getState().name = 'Alice' console.log(m.getState().name)

En el registro final de la consola, debería obtener "Smith". Quiero evitar la posibilidad de establecer el estado dentro del método getState

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El problema es que en JS los objetos se copian usando una referencia. Entonces getState está devolviendo una referencia en lugar de un objeto.

Intenta actualizar a esto en su lugar:

 this.getState = () => ({...SecretState});

Lo que esto hace es crear un nuevo objeto y pasar su referencia. De esta manera, solo se puede acceder a su SecretState usando setter. Sin embargo, esto no funcionará si tiene objetos anidados profundos, ya que la distribución de objetos solo funciona para el primer nivel.

 function State(){ const SecretState = { name: 'bob' } this.getState = () => ({...SecretState}); this.setState = (name) => SecretState.name = name; } const m = new State() m.setState('Smith') m.getState().name = 'Alice' console.log(m.getState().name)

about 4 years ago · Juan Pablo Isaza 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