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

266
Visualizações
¿Por qué el método getter de JavaScript realiza cambios antes, durante y después de su ejecución?

Construí el objeto usando la clase ES6, creando la marca y la propiedad de velocidad de cualquier automóvil de la siguiente manera, y también puse un getter para convertir la velocidad en millas.

 class CarCL { constructor(make, speed) { this.make = make; this.speed = speed; } // Converts current speed in mi/h get speedUS() { return (this.speed /= 1.6); } } const carFord = new CarCL('Ford', 120); console.log(carFord); console.log(carFord.speedUS);

Obtuve un resultado extraño en la consola como la siguiente imagen.

ingrese la descripción de la imagen aquí

¿Por qué la velocidad se convierte a 75 antes del método getter y luego continúa convirtiéndose a 46.875 y también nuevamente realizó cambios en el objeto CarCL.prototype a 29.296875, que es un prototipo de carFord?

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

El problema es esta línea:

 return (this.speed /= 1.6);

/= es una asignación de división , por lo que está diciendo efectivamente "establecer this.speed a su valor actual dividido por 1.6".

Un captador mutante es extremadamente confuso, como habrás notado. En su lugar, di return (this.speed / 1.6); y se comportará como cabría esperar.

about 4 years ago · Juan Pablo Isaza Relatório

0

En su getter speedUS() , está usando /= que asigna el resultado al operando izquierdo. Si no quiere eso (que presumiblemente no quiere), entonces cambie /= a solo / .

Cambia esto:

 return (this.speed /= 1.6);

a esto:

 return (this.speed / 1.6);

Tenga en cuenta también que todo el concepto de un getter que muta la propiedad que está obteniendo es generalmente malo (supongo que no fue su intención que mutara). Un getter no debe mutar. Es un captador. Usa un setter para mutar.

 class CarCL { constructor(make, speed) { this.make = make; this.speed = speed; } // Converts current speed in mi/h get speedUS() { return (this.speed / 1.6); } } const carFord = new CarCL('Ford', 120); console.log(carFord); console.log(carFord.speedUS);


Para agregar un punto adicional de explicación, también está viendo una rareza en cómo funciona console.log() en algunos navegadores. Usted pensaría que su código debería mostrar primero el objeto carFord sin modificar y, luego, y solo entonces, el getter carFord.speedUS modificaría el objeto. De hecho, si ejecuta su código en nodejs, eso es lo que ve.

Pero, en algunos navegadores, la evaluación y visualización de un objeto pasado a console.log() es "perezosa", lo que significa que no sucede de inmediato y, por lo tanto, el captador carFord.speedUS se ejecuta antes de que la consola carFord aunque no sea así. el orden de los enunciados. Esta es una rareza en la implementación de console.log() (visto regularmente en Chrome) y probablemente se deba a algunas optimizaciones de rendimiento para tratar de no ralentizar la ejecución más de lo necesario.

Si cambiaste tu código a esto:

 const carFord = new CarCL('Ford', 120); console.log(JSON.stringify(carFord)); console.log(carFord.speedUS);

A continuación, puede ver lo que espera:

 { "make": "Ford", "speed": 120 } 75

Por supuesto, todo esto es discutible si arreglas el getter speedUS() para no mutar el objeto.

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