Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

203
Visualizações
Cómo pasar "esto" a la función anónima llamada desde un objeto en Javascript

Comenzando tengo algunos planos de objetos como este

 const blueprints = [ { "name": "Wizard", "effect": () => doWizardStuff() }, { "name": "Paladin", "effect": () => doPaladinStuff() } ]

Por ahora supongamos que las dos funciones doWizardStuff() y doPaladinStuff() simplemente hacen console.log(this)

Más tarde creo Objetos a partir de los planos usando Constructores así:

 function Card(fromBlueprint, player){ this.name = fromBlueprint.name this.effect = fromBlueprint.effect this.belongsTo = player } let myWizard = new Card(blueprints[0],"Player1") let myPaladin = new Card(blueprints[1],"Player1")

Ahora me enfrento a dos problemas. El primer problema es que si no envuelvo el "efecto" en planos en una función anónima, la función asignada se ejecuta durante la ejecución new Card(...) , que no necesito ni quiero. Sin embargo, interpreta "esto" correctamente, como el Objeto que llamó a la función.

 { ... "effect": doWizardStuff() ...}, { ... "effect": () => doPaladinStuff() ...} let myWizard = new Card(blueprints[0],"Player1") // Card {name: "wizard", effect: doWizardStuff()} let myPaladin = new Card(blueprints[1],"Player1") // doesn't log anything, as doPaladinStuff() doesnt get called during construction

Espero que la diferencia sea clara con el ejemplo, doWizardStuff() se llama durante la construcción, mientras que doPaladinStuff() no, ya que está envuelto en una función anónima. Más adelante en el código puedo llamarlo usando:

 myPaladin.effect() //[object Window]

Sin embargo, cuando llamo a la función de esta manera, "esto" registra [ventana de objeto] y no la Card {name: "Paladin", effect: () => doPaladinStuff()} que la llamó. Ahora mi investigación me ha llevado a creer que .bind o .call pueden resolver este problema, sin embargo, no he descubierto cómo o dónde implementarlos. Para reformular, mis dos preguntas son

Hasta ahora he probado muchas variaciones del código, pero no he podido hacer que ninguna funcione. Intenté usar "effect": function() {doPaladinStuff()} en lugar de funciones de flecha, pasando "this" como argumento, "effect":function() {doPaladinStuff()}.bind(this) y combinaciones de todos ellos .

Entonces, para resumir, mis dos preguntas son:

  1. ¿Hay alguna manera de evitar que se llame a una función durante la construcción, que no incluya envolver dicha función en una función anónima?

  2. si no, ¿cómo puedo pasar "esto" a la función envuelta, de modo que se refiera al objeto que lo llamó y no al Objeto Ventana?

Estoy usando solo Javascript vainilla.

about 4 years ago · Santiago Gelvez
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda