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

192
Vistas
Cómo pasar las propiedades de Javascript correctamente para que puedan ser modificadas por una función

Entiendo que los objetos de JavaScript, incluidas las matrices, se pasan automáticamente por referencia, por lo que tengo algo como esto:

 class Thing { constructor( ) { this.letters = [ "A", "B" ]; this.numbers = [ 1, 2, 3 ]; this.change( this.letters, this.numbers ); } change( _letters, _numbers ) { let l = _letters; let n = _numbers; l = [ ]; n = 6; } } var t = new Thing( ); console.log( t );

La solicitud de registro muestra que no ha habido cambios en las propiedades de Thing . Y, sin embargo, bajo diferentes condiciones que no puedo reconocer, modifiqué accidentalmente los parámetros pasados dentro de una función y tuve que usar algo como n = Array.from( _numbers ) para evitar modificar la propiedad de origen. ¿Alguien sería capaz de explicar lo que está sucediendo y por qué?

Me gustaría pasar las propiedades del objeto por referencia, de modo que pueda modificar más de una propiedad relacionada en una sola llamada de función y, por lo tanto, reservar el valor devuelto para fines de depuración.

Gracias.

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

0

El tema es el alcance. Cuando declaró con let , la declaración tiene como alcance el change de función y también está reasignando las variables con alcance de bloque aquí:

 l = [ ]; n = 6;

Si desea cambiar las propiedades de la clase, puede hacerlo:

 change(_letters, _numbers) { this.letters = _letters; // `this` scoped to class this.numbers = _numbers; // `this` scoped to class }

Ver el ejemplo:

 // simple demo start let numbers = [1, 2, 3]; let n = numbers; n.push(4) console.info(n, typeof n); n = 6; // reassign n console.info(n, typeof n, numbers); // simple demo end // refactored class class Thing { constructor() { this.letters = ["A", "B"]; this.numbers = [1, 2, 3]; this.change(this.letters, this.numbers); } change(_letters, _numbers) { let l = _letters; // `let` is scoped to `change()` let n = _numbers; // `let` is scoped to `change()` l = []; // only changes scoped l n = 6; // only changes scoped n } changeFix(_letters, _numbers) { this.letters = _letters; // `this` scoped to class this.numbers = _numbers; // `this` scoped to class } } var t = new Thing(); console.log(t); t.change(['C'], [4]); console.info(t); t.changeFix(['C'], [4]); console.info(t);

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