如何通过仅传入引用对象属性的函数来修改对象?
能否实现该需求?
结论:无法实现,核心原因有两点:
缺少目标对象的引用
你提供的 getter 函数(someObject) => someObject.someProp是纯读取逻辑——它必须接收一个对象参数才能返回属性值,但modifyObject的输入只有这个 getter 和新值,完全没有要修改的目标对象的引用,根本不知道该操作哪个对象。无法从 getter 逆向解析属性路径
退一步说,就算能拿到目标对象,普通的 getter 函数也不会暴露它访问的属性名。比如这个箭头函数编译后只是一段执行读取操作的代码,没有携带任何关于someProp的元信息,没办法通过函数本身解析出要修改的属性是什么。
特殊场景下的变通方案
如果能提前控制 getter 的创建方式,给它附加额外元信息,倒是可以实现类似效果,但这已经偏离了原问题的输入限制:
// 用工厂函数生成带元信息的getter function createGetter(propName) { const getter = (obj) => obj[propName]; getter._targetProp = propName; // 附加属性名元信息 return getter; } // 生成针对someProp的getter const getSomeProp = createGetter('someProp'); // 此时modifyObject需要额外传入目标对象(否则还是不知道要改哪个对象) const modifyObject = (getter, targetObj, newValue) => { if (getter._targetProp) { targetObj[getter._targetProp] = newValue; } }; // 使用示例 const myObj = { someProp: '旧值' }; modifyObject(getSomeProp, myObj, '新值'); console.log(myObj.someProp); // 输出 '新值'
内容的提问来源于stack exchange,提问作者David Fariña
相关产品推荐
相关产品推荐

