我想創建一個新物件,該物件具有從其他物件參考屬性的屬性。我想修改新物件屬性以更新原始源物件屬性。
const obj1 = {
a: 1,
}
const obj2 = {
b: 2,
}
const newObj = {...obj1, ...obj2};
newObj.a = 3;
// obj1.a should also be set to 3
我認為這可以通過 getter 和 setter 來實作,但是是否可以從另一個物件的屬性鍵動態創建 get/set?
謝謝!
uj5u.com熱心網友回復:
您可以創建一個物件的 Map 來參考,然后創建一個代理來從 Map 添加/更新/獲取值:
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 })
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/317999.html
標籤:javascript 目的 特性 参考
