Aquí está el código simple. Necesito usar la función de flecha hello() por razones en la clase secundaria.
El código arroja un error cuando llamo a the.greeting() en el constructor de la clase principal:
index.ts:29 TypeError no capturado: this.hello no es una función en Child.greeting ...
Sin embargo, el problema no ocurre cuando uso la función regular, sino que debo usar la función de flecha.
Por favor, dime cuál es el problema y cómo solucionarlo.
abstract class Parent{ constructor(){ this.greeting(); } abstract hello(); greeting(){ this.hello(); } } class Child extends Parent{ hello = ()=>{ console.log('hello there'); } } const child = new Child();La forma en que funciona la propiedad hello en Child es efectivamente mediante el lenguaje que agrega un constructor a Child que dice:
constructor() { this.hello = () => ... } Child constructor secundario no se ejecuta hasta que el Parent haya terminado, por lo que en el momento en que se Parent el constructor principal, aún no se ha asignado el hello . Por eso explota. (Algunos otros lenguajes le impiden llamar a métodos virtuales desde dentro de un constructor de clase base por la misma razón).
(¿Por qué 'necesita' hacer hello una función de flecha?)
Arreglarlo es un poco complicado. Si desea que se pueda llamar desde el Parent , simplemente no puede convertirlo en una función de flecha de inmediato.
¿Presumiblemente necesita usar una función de flecha porque a veces desea que hello funcione como una función separable (es decir, llamada como un método simple sin ser una función)? Si es así, simplemente puede enlazarlo en use , usando child.hello.bind(child) cuando lo necesite.