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

144
Vistas
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 Respuestas
Responde la pregunta

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 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