javascript - 将 "x"参数数量设置为函数属性

标签 javascript

我正在尝试创建一个通用函数,您可以在其中传递具有随机函数属性的对象。有了这个,您应该能够设置一个属性,说明函数每个参数的键和值。

通用函数应该使用所有参数调用这个“随机”函数。

但是我不太确定该怎么做?

// Keep in mind its created for demonstration purposes

var functionOne = function(id)
{
    return id;
}
var functionTwo = function(id,name)
{
    return id + ' 'name;
}

var functionThree = funciton(id,name,age)
{
        return id + ' '+name+' '+age;
}
var obj = [
  {
      callback: functionOne,
      callbackParameters: [{key: 'id', value: 1}]

  },
  {
      callback: functionTwo,
      callbackParameters: [{key: 'id', value: 1}, {key: 'name', value:'Marc'}]

  },

  {
      callback: functionThree,
      callbackParameters: [{key: 'id', value: 1}, {key: 'name', value: 'Marc'}, {key: 'age', value: 45}]

  }
]

obj.forEach(function(x){
    //How do i call it with the correct keys? :(
})

Fiddle

最佳答案

您可以在 JS 中对函数调用 apply() 并向其中传递参数数组。因此,假设您的回调参数始终处于正确的顺序,您可以使用以下内容。

obj.forEach(function(x){
    var parameters = x.callbackParameters.map(function(p) { return p.value; });
  console.log(x.callback.apply(this, parameters));
})

更新了 fiddle https://jsfiddle.net/y6oh1078/1/

编辑:进一步阅读

如果您对在 JS 中操作函数的更多方法感兴趣,那么以下有关柯里化(Currying)的文章值得一读 - https://www.sitepoint.com/currying-in-functional-javascript/

关于javascript - 将 "x"参数数量设置为函数属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38784836/

相关文章:

javascript - 带有基于输入值的前缀名称的 jQuery addClass

javascript - AFrame - 从相机 fuse 中排除实体

javascript - 如何检测 Chrome(和其他)中是否启用了 native FlashBlock?

javascript - 如何使 Shift + Enter 在内容可编辑的 div 中表现得像 Enter?

javascript - Ant Design Upload 获取文件内容

JavaScript - 隐藏所有其他 div

javascript - 传递给 readFileSync 的匿名函数不返回任何数据

Javascript-JQuery : sliding menu going left-to-right?

javascript - 只能从简单的 Javascript 表单返回 NaN

javascript - OnBlur 没有以正确的方式被调用 - Jest enzyme