Como mencioné en el título, me gustaría pasar alguna función como devolución de llamada a la función de inicio en alguna clase
Voy a poner aquí una estructura básica:
class Person { constructor() { this.nums = [1, 2, 3]; this.init(); } init() { this.nums.forEach(num => { console.log(num); }); } }Digamos que me gustaría agregar esta función como devolución de llamada a la función de inicio:
function test() { console.log('test') }Cómo puedo hacer esto
class Person { constructor(cb) { this.nums = [1, 2, 3]; this.cb = cb; this.init() } init() { this.nums.forEach(num => { console.log(num) }) this.cb() } } const test = () => { console.log('test') } const myPerson = new Person(test)Declare la callback de llamada como un parámetro en su método de init y llame a la callback de llamada al final de su método de init .
Mientras llama a su método init , pase la test como argumento.
En caso de que el OP quiera que se invoque la devolución de llamada como si fuera un método de la instancia de Persona y, además, también quiere manejar el paso de argumentos a dicha devolución de llamada, entonces init ya no es solo un inicializador.
Se convierte en un único método genérico de cualquier instancia de Person que invoca cualquier función pasada dentro del contexto de dicha instancia mientras pasa el resto de sus argumentos a la devolución de llamada.
Tal método entonces podría ser renombrado de init para execute ...
function pushNumberValues(...values) { this.nums.push(...(values.flat())); } function logInstanceNumbers() { this.nums.forEach(num => console.log(num) ); } class Person { constructor() { this.nums = [0, 1, 2]; } execute(callback, ...args) { return callback.apply(this, args); } } const person = new Person; person.execute(pushNumberValues, 3, 4, 5, 6); person.execute(pushNumberValues, [7 , 8 , 9]); person.execute(logInstanceNumbers); .as-console-wrapper { min-height: 100%!important; top: 0; }