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
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)