Quiero llamar a una función desde un método. Ni siquiera sé cómo preguntar correctamente. test.onload() se llama inmediatamente, no después de 3 segundos. Ver código por ejemplo, por favor.
export default class { constructor() { // some code setTimeout(() => { this.onload; }, 3000); } onload = (fn) => { console.log('loaded event'); fn(); }; } const test = new TEST(); test.onload(function () { console.log('from instance'); });Estás llamando a la función directamente. De alguna manera, cree que se llamará cuando se ejecute setTimeout, lo cual no es el caso.
Si desea que se llame a la función "desde la instancia", debe repensar cómo la está registrando. Vas a tener que almacenar la función de alguna manera y dejar que el temporizador la recoja y la ejecute.
Configurándolo con el constructor.
class TEST { constructor(callback) { this.callback = callback; setTimeout(() => this.onload(), 3000); } onload = () => { console.log('loaded event'); if(this.callback) this.callback(); }; } const test = new TEST(function () { console.log('from instance'); });Configurándolo con un método
class TEST { constructor() { setTimeout(() => this.onload(), 3000); } onload = () => { console.log('loaded event'); if(this.callback) this.callback(); }; registerCallback(callback) { this.callback = callback; } } const test = new TEST(); test.registerCallback(function () { console.log('from instance'); });