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

137
Vistas
fusionar dos objetos de JavaScript y mantener las definiciones de métodos

Supongamos que tengo una clase de javascript:

 class SomeClass { constructor() { this.field1 = []; this.field2 = 0; this.field3 = "somestring"; } someMethod(param1) { // do some magical stuff } }

En algún momento tengo la necesidad de fusionar dos objetos, uno de ellos es del tipo SomeClass .

 const obj1 = new SomeClass(); const obj2 = { field1: [1, 2, 3], field2: [3, 4, 5], field3: "other string" } const mergedObj = {...obj1, ...obj2};

Ahora he perdido el método someMethod en la variable mergedObj , lanzando un TypeError:

 mergedObj.someMethod("amazingparam"); //=> Uncaught TypeError: mergedObj.someMethod is not a function

¿Cómo puedo mantener las definiciones de los métodos?

Editar

Para ser más claro: me gustaría crear un nuevo objeto, mantener el obj1 y el obj2 como estaban.

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

0

Puede usar Object.assign , lo fusionará por usted, pero esto mutará su primer object , por lo que para resolver ese problema, podría crear un clon de su primer objeto sobre la marcha usando Object.create como este

 class SomeClass { constructor() { this.field1 = []; this.field2 = 0; this.field3 = "somestring"; } someMethod(param1) { console.log('hello') // do some magical stuff } } const obj1 = new SomeClass(); const obj2 = { field1: [1, 2, 3], field2: [3, 4, 5], field3: "other string" } let mergedObj = Object.assign(Object.create(obj1), obj2); mergedObj.someMethod('')

about 4 years ago · Juan Pablo Isaza Denunciar

0

A partir de la respuesta de Joseph, encontré una solución.

 class SomeAmazingClass{ constructor() { this.var1 = ""; this.var2 = ""; } someMethod() { return this.var1 + this.var2; } } function mergeToSomeAmazingClass(obj1, obj2) { return Object.assign(new SomeAmazingClass(), obj1, obj2); } let a1 = new SomeAmazingClass(); a1.var1 = "OldVar1" a1.var2 = "OldVar2" a1.newVar3 = "Yay" let a2 = { var1: "NewVar1" } let merged = mergeToSomeAmazingClass(a1, a2); console.log(merged.someMethod());

Esto mantiene las definiciones de los métodos y evita que los objetos de entrada muten. Parece un poco torpe, pero si hay una solución mejor, me encantaría verla.

Editar

Se actualizó la función de combinación.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Simplemente haga que su constructor acepte parámetros opcionales:

 class SomeClass { constructor({field1 = [], field2 = 0, field3 = "somestring"}) { Object.assign(this, {field1, field2, field3}); } someMethod(param1) { // do some magical stuff console.log('SomeClass instance here'); } } const obj2 = { field1: [1, 2, 3], field2: [3, 4, 5], field3: "other string" } const obj1 = new SomeClass(obj2); obj1.someMethod(); console.log(obj1);

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