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

147
Visualizações
Llamar al constructor de clase como función en la instancia

Estoy escribiendo una clase de grupo de objetos que conserva objetos antiguos no utilizados, y cuando se necesita uno nuevo, puede usar una de sus reservas (sin la costosa creación de objetos). Sin embargo, quiero poder guardar cualquier dato en este grupo (no limitado a algo como extends Poolable ). El problema es que la mayoría de los grupos de objetos requieren algo como esto:

 class MyData { constructor(str) { this.reset(str) } reset(str) { this.str = str; } }

Para que cuando se necesite una nueva instancia, el grupo pueda llamar a oldInstance.reset(prams) . Como se indicó anteriormente, no quiero esto (trabajar con muchas herramientas de terceros para las que no tengo ganas de escribir envoltorios), por lo que mis datos se ven así:

 class MyData { constructor(str) { this.str = str; } }

Cuando el grupo necesita restablecer una instancia, necesito poder llamar al constructor como una función y establecer this valor en la instancia que se está borrando.

Esto es muy fácil con clases antiguas que usaban sintaxis de function/prototype cuando se crearon:

 const MyClass = function(str) { this.str = str; } // Reset an instance const instance = new MyClass("foo"); MyClass.apply(instance, ["bar"]) // done

Sin embargo, cuando hago eso para las clases, se queja de que no puede usar una clase sin la nueva palabra clave. ¿Cómo voy a hacer esto?

Violín: https://jsfiddle.net/wuqek405/

Editar: como dije, la mayoría de los grupos de objetos necesitan una función de reinicio. Estoy tratando de usar el constructor como esta función, porque se supone que "configura" la instancia. Otra solución sería generar esta función de reinicio basada en la clase. Sin embargo, quiero que sea lo más rápido posible, por lo que las soluciones terriblemente complicadas, como encadenar la clase y eval el constructor, no serían óptimas.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Esto no es posible. Una class no se puede llamar 1 , solo se puede construir, lo que significa crear un nuevo objeto. Esto era nuevo en ES6 , que revisó el modelo de herencia de clases e introdujo super . Además, ES2022 introducirá campos de clase, que también se crean durante la construcción sin que se mencionen en el código del constructor.

Su única opción es usar solo clases basadas en function ES5, un transpilador o escribir métodos de reset explícitos.

1: técnicamente, se puede llamar ( typeof C == 'function' ), pero [[Call]] siempre lanzará una excepción

about 4 years ago · Juan Pablo Isaza Relatório
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