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

97
Vistas
Perder el valor de esta palabra clave cuando se usa con variables de nivel de instancia en una clase en javascript

Tengo dos clases, una de ellas es la clase principal y la otra es la clase secundaria y lo que intento lograr es acceder a los valores de las variables de nivel de instancia de la clase secundaria mediante el uso de this palabra clave en un campo que se declara en el clase de padres . Pero cuando trato de hacerlo, devuelve undefined . ¿Puede alguien explicar qué podría estar yendo mal aquí? A continuación, he pegado un fragmento de código para su referencia. ¡Gracias!

 class Parent { someField = { someValue: 'Values are ::: '+ this.value1 + ' ' + this.value2, childType2: "Some gibberish" } initialize(childType1) { this.someField = this.someField[childType1]; } } class Child extends Parent { value1 = "someValue 1" value2 = "someValue 2" } const child = new Child(); child.initialize("someValue"); console.log(child.someField);

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

0

No es que this esté mal, es una cuestión de tiempo. Su código que inicializa someField se ejecuta como parte del Parent principal, antes de que su código inicialice value1 y value2 se ejecute (como parte del constructor Child ). Entonces te vuelves undefined al leerlos.

De la forma en que funcionan los campos públicos en JavaScript, la definición de la propiedad definida por la declaración del campo se convierte en parte del código del constructor, exactamente como si lo hubiera escrito al principio del constructor (justo después de cualquier llamada a super ) (pero [efectivo ] usando Object.defineProperty , no solo una asignación simple; detalles ). Es decir, su código es efectivamente el mismo que este:

 class Parent { constructor() { Object.defineProperty(this, "someField", { value: { someValue: 'Values are ::: '+ this.value1 + ' ' + this.value2, childType2: "Some gibberish" }, writable: true, enumerable: true, configurable: true }); } initialize(childType1) { this.someField = this.someField[childType1]; } } class Child extends Parent { constructor() { super(); Object.defineProperty(this, "value1", { value: "someValue 1", writable: true, enumerable: true, configurable: true }); Object.defineProperty(this, "value2", { value: "someValue 2", writable: true, enumerable: true, configurable: true }); } } const child = new Child(); child.initialize("someValue"); console.log(child.someField);

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