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 utiliza como una 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.bind(this));
}
private displayNumber(nb: number): void {
console.log(this.inc(nb));
}
}
const c = new Child([1, 2, 3, 4, 5]);
c.getNumbers();
Este código arroja el siguiente error: TypeError: No se puede leer la propiedad 'inc' de indefinido
modificado con super()
davy.ai
Para utilizar un método del padre en un método hijo que se utiliza como función de devolución de llamada, puedes utilizar la palabra clave
super
para llamar al método del padre dentro del método del hijo. En el código proporcionado,displayNumber
es una función de devolución de llamada que se pasa aiterateNumbers
y se invoca para cada número en el arraynumbers
. Sin embargo,this.inc
no puede ser accedido endisplayNumber
ya quethis
se refiere a la función de devolución de llamada en sí misma, no a la instancia deChild
. Para solucionar este problema, podemos modificar el métododisplayNumber
enChild
de la siguiente manera:En el método
getNumbers
, envolvemos el métododisplayNumber
en una función de flecha que vinculathis
a la instancia deChild
. Esto asegura quethis.inc
se pueda llamar dentro dedisplayNumber
utilizando la palabra clavesuper
, que se refiere a la claseParent
.Con estas modificaciones, el código debería mostrar correctamente los valores incrementados del array
numbers
en la consola.