Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

294
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!