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

291
Vistas
Mecanografiado: ¿cómo pasar MyClass.new como referencia de método?

Tengo una matriz de objetos, donde cada objeto se ve así:

 { id: 'string', name: 'string' }

Dada esta clase:

 class User { constructor(obj: Record<string, string>) { Object.assign(this, obj); } id: string; name: string; }

Quiero usar Array.map() para crear una matriz de User :

 const users = userObjects.map(o => new User(o));

Lo anterior funciona, pero se siente mal: ¿hay alguna manera de pasar una referencia a la new del User y evitar la función de flecha?

No estoy realmente seguro de si la respuesta es diferente entre Javascript y Typescript (sospecho que no lo es), pero FWIW estoy codificando en Typescript.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

No, no hay (aparte de una función de utilidad que puede escribir para hacer esa función de flecha por usted, pero eso es solo una abstracción de lo que ya tiene). El problema es que no hay un método new (como User::new de Java), solo existe la función User en sí misma, y si crea una instancia User o arroja un error (en entornos modernos) depende de cómo lo llame. Si lo llama a través de new (o un mecanismo similar como Reflect.construct ), crea una instancia User . Si lo llama directamente, arroja un error (en ES2015+; si está compilando a ES5, no lo hará, pero tampoco funcionará correctamente).

Lo que tienes (la función de flecha contenedora) es una forma perfectamente buena de hacerlo (y probablemente lo que yo haría).

Si necesita hacer esto en varios lugares, puede poner un método estático en User :

 class User { // ... static create(...args) { return new User(...args); } } // ... const users = userObjects.map(User.create);

(Tenga en cuenta que create no funcionará correctamente en las subclases de User [dependiendo de su definición de "correctamente"], siempre crea una instancia User , incluso si se llama UserSubclass.create(/*...*/) . Normalmente podría use this en lugar de User [ new this(...args) ], que aunque parece extraño, funciona siempre que la llamada establezca this correctamente [como User.create(/*...*/) o UserSubclass.create(/*...*/) lo haría], pero el map no configurará this correctamente, por lo que no funcionará a menos que bind create o recuerde pasar el segundo argumento al map [ .map(User.create, User) ], lo que nos lleva de vuelta a: una función de flecha contenedora probablemente tenga más sentido).

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