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

167
Vistas
Cómo referirse a 'esto' correcto en devolución de llamada anidada

En el siguiente código, obtengo una referencia indefinida para this.lister en el método create_components . Estoy tratando de entender el significado de this (aparentemente cambia según cómo llame al método), pero sería genial si alguien pudiera señalar la regla por la que this no se vincula con ScreenCreator y cómo puedo lograrlo.

¡Gracias!

 function ScreenCreator(config, container) { this.lister = new Lister(); this.goldenlayout = new GoldenLayout(config, container); this.create_components(); this.goldenlayout.init(); } ScreenCreator.prototype.create_components = function() { this.goldenlayout.registerComponent('comp1', function (container, state) { this.lister.init(container, state); }); }
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Cree una variable en la parte exterior (normalmente la llamo self , pero cualquier cosa funciona) y utilícela en el interior.

 function ScreenCreator(config, container) { this.lister = new Lister(); this.goldenlayout = new GoldenLayout(config, container); this.create_components(); this.goldenlayout.init(); } ScreenCreator.prototype.create_components = function() { const self = this; this.goldenlayout.registerComponent('comp1', function (container, state) { self.lister.init(container, state); }); }

Alternativamente, puede usar una función de flecha, ya que no crean su propio this contexto.

 ScreenCreator.prototype.create_components = function() { this.goldenlayout.registerComponent('comp1', (container, state) => { this.lister.init(container, state); }); }

Si desea una forma extraña de hacerlo, que probablemente no debería usar a menos que los demás no funcionen, esto es lo siguiente: (agregando .bind(this) después de la función)

 ScreenCreator.prototype.create_components = function() { this.goldenlayout.registerComponent('comp1', (function (container, state) { this.lister.init(container, state); }).bind(this)); }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Podrías almacenar this in a variable como

 ScreenCreator.prototype.create_components = function() { let screenCreatorThis = this this.goldenlayout.registerComponent('comp1', function (container, state) { screenCreatorThis.lister.init(container, state); }); }
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