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

165
Visualizações
Cómo usar una función de devolución de llamada en una clase con herencia

¿Cómo puedo usar un método del padre en un método hijo que se usa como función de devolución de llamada?

 class Parent { numbers: number[]; constructor(numbers: number[]) { this.numbers = numbers; } protected iterateNumbers(iterCallback: (nb: number) => void): void { for (const nb of this.numbers) { iterCallback(nb); } } protected inc(nb: number): number { return nb++; } } class Child extends Parent { constructor(numbers: number[]) { super(numbers) } getNumbers(): void { this.iterateNumbers(this.displayNumber); } private displayNumber(nb: number): void { console.log(this.inc(nb)); } } const c = new Child([1, 2, 3, 4, 5]); c.getNumbers();

Este código da como resultado este error: TypeError: Cannot read property 'inc' of undefined

modificado con super()

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

0

Encontré una manera de hacer lo mismo pero con un método no estático

El estilo ES6 le permite usar nuevas funciones, como la súper palabra clave. super palabra clave todo se trata del contexto de la clase principal, cuando está utilizando la sintaxis de clases ES6.

 class Parent { numbers: number[]; constructor(numbers: number[]) { this.numbers = numbers; } protected iterateNumbers(predictionCallback: (nb: number) => void): void { for (const nb of this.numbers) { predictionCallback(nb); } } protected inc(nb: number): number { return nb++; } } class Child extends Parent { constructor(numbers: number[]) { super(numbers) } getNumbers() { this.iterateNumbers(this.displayNumber); } private displayNumber(nb: number): void { console.log(super.inc(nb)); } } const c = new Child([1, 2, 3, 4, 5]); c.getNumbers();
about 4 years ago · Juan Pablo Isaza Relatório

0

Debe llamar al supermétodo en el constructor de la clase secundaria para acceder a las propiedades y métodos de la superclase.

Además, como tiene el método displayNumber privado, no podrá acceder a él desde un objeto creado a partir de la clase child . Eliminar la palabra clave privada permitiría el acceso

Intente cambiar su hijo extendido para incluir el método constructor y la súper llamada:

 class Child extends Parent { constructor() { super() } getNumbers(): void { this.iterateNumbers(this.displayNumber); } displayNumber(nb: number): void { console.log(this.inc(nb)); } }

Puede leer más en los documentos de MDN sobre la palabra clave super

ACTUALIZAR:

Después de probar un poco, encontré una solución a por qué recibe ese error, por supuesto, se trata de contexto. Si hace que el método inc sea estático, podrá llamarlo mediante Parent.inc()

Al pasar el método displayNumber como una devolución de llamada, está perdiendo el contexto de la clase desde la que desea llamar. Es por eso que obtienes el error indefinido.

 class Parent { numbers: number[]; constructor(numbers: number[]) { this.numbers = numbers; } protected iterateNumbers(iterCallback: (nb: number) => void): void { for (const nb of this.numbers) { iterCallback(nb); } } static inc(nb: number): number { return nb++; } } class Child extends Parent { constructor(numbers: number[]) { super(numbers) } getNumbers(): void { this.iterateNumbers(this.displayNumber); } private displayNumber(nb: number): void { console.log(Parent.inc(nb)); } } const c = new Child([1, 2, 3, 4, 5]); c.getNumbers(); // prints 1 2 3 4 5

Si ejecuta este código, verá los números impresos.

Ahora, al llamar al método super en el constructor child y actualizar el método inc para que sea estático y llamarlo como tal, creo que obtendrá los resultados esperados.

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