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

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

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 Report

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