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

179
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 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