Javascript-更新对象属性的函数

Javascript-更新对象属性的函数,javascript,function,object,Javascript,Function,Object,我想有更新元素道具的功能。像这样的 function updateElement(element, propName, value){ element[propName] = value; } 执行过程将如下所示: updateElement(item, "name", "foo") 它正在工作,但我想将propName作为一个函数传递,以避免字符串:类似这样的内容: updateElement(item, x => x.name, "foo"); 但我不确定它的实现应该是什

我想有更新元素道具的功能。像这样的

function updateElement(element, propName, value){
    element[propName] = value;
}
执行过程将如下所示:

updateElement(item, "name", "foo")
它正在工作,但我想将propName作为一个函数传递,以避免字符串:类似这样的内容:

updateElement(item, x => x.name, "foo");
但我不确定它的实现应该是什么样子,我有类似的东西,但它不起作用

function updateElement(element, mapFn, value){
    mapFn(element) = value;
}
你能帮我吗

编辑我希望有更通用的解决方案,我希望避免硬编码字符串,例如:

let item = {name: 'foo', address: {...}, ...};
我希望以这种方式调用我的函数:

updateElement(item, x => x.name, "foo") <- it will update name, or


updateElement(item, x => x.address, newAddress) <- it will change prop of address

updateElement(item,x=>x.name,“foo”)x.address,newAddress)是否可以传入一个返回名称的函数

function returnName(){
  return "name";
}
然后,您可以使用该函数返回名称并对其执行所需操作:

function passFunction(func){
  console.log(func());
}
passFunction(returnName);

但是为什么要传递函数来获取字符串呢?您可以使用一个包含字符串的对象并传递该对象

这是我的评论的扩展,但您可以使用带有签名的回调:

(object:object,value:any)=>//做事

下面是一个函数的实现,该函数验证预定义属性并将其值设置为预定义属性

想法:
  • 创建接受回调并返回处理函数的包装函数
  • 处理函数定义行为,与对象无关
  • 您可以在任何对象上调用此函数,并期望得到相同的副作用
这种方法的好处是,您可以创建通用的验证器和setter函数

函数updateElement(setCallback、validateCallback){
返回函数setValue(对象、值){
如果(!validateCallback | | validateCallback(值)){
setCallback(对象、值)
}否则{
log(“错误:传递的值不正确”);
}
}
}
常量dummy={};
const setNameFn=updateElement((上下文,值)=>context.name=value)
const setAgeFn=updateElement((上下文,值)=>context.age=value,(值)=>!isNaN(值));
setNameFn(虚拟“foo”);
setAgeFn(虚拟“bla”)
setAgeFn(假人,20);

控制台日志(虚拟)您想要的是不可能的
x=>x.name
将读取
x.name
的值并返回它。在JS中,不可能获取指向单个属性的引用或指针来更改其值。您可能可以使用属性描述符做一些事情,但这并不比只分配属性简单

让我们看一下您的示例:

updateElement(item, x => x.name, "foo") // <- it will update name, or
updateElement(item, x => x.address, newAddress) // <- it will change prop of address

我真的不知道
updateElement
函数能提供什么好处,也许您可以提供更多关于为什么需要这样做的信息。

传递回调没有意义,但如果您愿意,您可以尝试
(context,value)=>context.name=value
。因此,您不是在做
mapFn(元素)=value
,而是在做
mapFn(元素,值)
,老实说,我发现很难理解您的需求。将引用传递给函数是一个糟糕的设计,因为它会产生副作用。好的,我同意这会产生副作用。但我只是想知道如何实现这一点。我的目标是从代码中删除硬编码的字符串,所以我不会将此函数用于返回Stringah好的,那么字符串是从哪里来的呢?现在有一些硬编码的函数调用,如:updateElement(项,“name”,“foo”)但是我想有一些更通用的递归invocation@Rajesh:固定:)谢谢。大脑比手快。
item.name = "foo"
item.address = newAddress