Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

142
Vistas
Pasar el método de clase dentro de una devolución de llamada del método de flecha está perdiendo `este` contexto

Estoy luchando por entender por qué este fragmento perdería el contexto de this . Lo que quería lograr es eliminar un (primer) argumento de la función que se ha ejecutado y que se ha logrado. El problema es que en este momento no puedo acceder a nada desde el alcance de la instancia de clase. ¿Alguien tiene idea de lo que ha sucedido aquí? Creo que podría estar relacionado con el método de doble flecha que se ha utilizado, pero no tengo idea de cómo solucionarlo.

 class Callback { test = 'test'; callback(a) { console.log(this); console.log(a); } } const callback = new Callback(); const serverAdapter = (cb) => (_, args, context) => cb(args, context?.req); console.log("Having a context"); callback.callback('test'); console.log("Losing the context"); serverAdapter(callback.callback)(1,2,3);

Salir:

 [LOG]: "Having a context" [LOG]: Callback: { "test": "test" } [LOG]: "test" [LOG]: "Losing the context" [LOG]: undefined [LOG]: 2
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Cambia esto:

 serverAdapter(callback.callback)(1,2,3);

a esto:

 serverAdapter(callback.callback.bind(callback))(1,2,3);

Cuando pasa obj.foo como argumento, solo se pasa una referencia al método como una función simple y luego, cuando la función a la que se lo pasó llama a esa función, simplemente se llama como una función simple, no como obj.foo() por lo que ya no hay ninguna referencia al objeto original.

Hay múltiples formas de resolver esto. Usar .bind() es uno de esos mecanismos.


Si realmente fuera a utilizar esta clase como un administrador de devolución de llamada, podría crear el enlace en la clase de devolución de llamada de esta manera:

 class Callback { test = 'test'; constructor() { // create bound method this.callback = this.callbackOp.bind(this); } callbackOp(a) { console.log(this); console.log(a); } }

Luego, podría simplemente pasar obj.callback . callback como una devolución de llamada y automáticamente se vincularía a obj por usted.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda