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
Indefinido tratando de acceder a una variable de una clase escrita en JS

Estoy tratando de hacer que este código funcione correctamente:

 class Reminder { constructor(text) { this.text = text; } remindMe(delay) { setTimeout(function() { console.log(`Your reminder after ${delay} seconds is: ${this.text}`); }, delay * 1000); } } //shows Reminder {text: "Hello World"} const example = new Reminder("Hello world"); //shows undefined console.log(example); // shows "Your reminder after 3 seconds is: undefined" console.log(example.remindMe(3));

Llevo mucho tiempo sin trabajar con clases, y sé que no está undefined porque el método remindMe no tiene acceso al constructor, porque no tiene getter. Pero traté de crear un getter y no me dejó llamarlo desde el método remindMe , traté de hacer algo como esto:

 remindMe(delay) { setTimeout(function () { console.log(`Your reminder after ${delay} seconds is: ${getText()}); }, delay * 1000); }

¿Alguna idea de dónde está el error? Gracias.

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

0

El método remindMe no está undefined porque no return nada, this.text está definido, porque this aquí se refiere a la window , debe bind con el objeto Reminder .

 class Reminder { constructor(text) { this.text = text; } remindMe(delay) { setTimeout(function() { console.log(`Your reminder after ${delay} seconds is: ${this.text}`); }.bind(this), delay * 1000); } } //shows Reminder {text: "Hello World"} const example = new Reminder("Hello world"); //shows undefined console.log(example); // shows "Your reminder after 3 seconds is: undefined" console.log(example.remindMe(3));

about 4 years ago · Juan Pablo Isaza Denunciar

0

Es porque está utilizando una function como devolución de llamada en su intervalo, redefiniendo el contexto, por lo tanto, el valor de this .

Use arrow function en su lugar:

 remindMe(delay) { setTimeout(() => { console.log(`Your reminder after ${delay} seconds is: ${this.text}`); }, delay * 1000); }

El otro undefined proviene del hecho de que está imprimiendo el valor de retorno de remindMe pero no tiene ninguna palabra clave de return , por lo tanto, se devuelve undefined .

about 4 years ago · Juan Pablo Isaza Denunciar

0

  1. El example se está registrando en su código (como puede ver en el fragmento). Registra:

     { "text": "Hello world" }
  2. remindMe no devuelve nada explícitamente, por lo que el valor predeterminado es undefined (ese es el primer undefined en su salida). (Nota: dado que remindMe también es una función que contiene un tiempo de espera, aún no funcionaría porque está iniciando sesión de inmediato y la función solo se completa después de tres segundos. Además, contiene su propio console.log , por lo que no es necesario registrar el resultado. de llamar a la función de todos modos.)

  3. this no funcionará como desea en ese setTimeout porque el contexto ha cambiado. En su lugar, use una función de flecha : no tienen this propio y "toman prestado" this de su entorno léxico externo.

 class Reminder { constructor(text) { this.text = text; } remindMe(delay) { setTimeout(() => { console.log(`Your reminder after ${delay} seconds is: ${this.text}`); }, delay * 1000); } } const example = new Reminder("Hello world"); console.log(example); example.remindMe(3);

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