You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过仅传入引用对象属性的函数来修改对象?

能否实现该需求?

结论:无法实现,核心原因有两点:

  1. 缺少目标对象的引用
    你提供的 getter 函数(someObject) => someObject.someProp是纯读取逻辑——它必须接收一个对象参数才能返回属性值,但modifyObject的输入只有这个 getter 和新值,完全没有要修改的目标对象的引用,根本不知道该操作哪个对象。

  2. 无法从 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 17:05:20