Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

176
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!