Quiero crear un nuevo objeto que tenga propiedades que hagan referencia a propiedades de otros objetos. Quiero modificar las propiedades del objeto nuevo para actualizar también las propiedades del objeto de origen original.
const obj1 = { a: 1, } const obj2 = { b: 2, } const newObj = {...obj1, ...obj2}; newObj.a = 3; // obj1.a should also be set to 3Creo que esto se puede lograr a través de getters y setters, pero ¿es posible crear get/set dinámicamente a partir de claves de propiedad de otro objeto?
¡Gracias!
Puede crear un mapa de objetos para hacer referencia y luego crear un proxy para agregar/actualizar/obtener valores del mapa:
const obj1 = { a: 1, } const obj2 = { b: 2, } const objects = new Map([obj1, obj2].flatMap(o => Object.keys(o).map(k => [k, o]) )) const newObj = new Proxy(objects, { get(target, prop) { if (prop === 'toJSON') { return () => Object.assign({}, ...target.values()) } const obj = target.get(prop) return obj ? obj[prop] : undefined }, set(target, prop, value) { const obj = target.get(prop) if(!obj) { target.set(prop, {}) } obj[prop] = value return true }, has(target, prop) { return target.has(prop); }, ownKeys() { return [...target.keys()] } }) newObj.a = 3 newObj.b = 5 console.log({ obj1 }) console.log({ obj2 }) console.log({ newObj })