Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

136
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!