设置" x"函数属性的参数个数

时间:2016-08-05 08:38:14

标签: javascript

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

然后,通用函数应该调用这个"随机"具有所有参数的功能。

但是我不太清楚怎么做?

$credentials = Get-Credential

Login-AzureRmAcoount -Credential $credentials

$SubscriptionName
Select-AzureRmSubscription -SubscriptionName "The name of your subscription"
Select-AzureRmSubscription -SubscriptionName $SubscriptionName

Fiddle

2 个答案:

答案 0 :(得分:4)

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

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

更新了小提琴https://jsfiddle.net/y6oh1078/1/

修改:进一步阅读

如果您对在JS中操作函数的更多方法感兴趣,下面关于currying的文章是一个很好的阅读 - https://www.sitepoint.com/currying-in-functional-javascript/

答案 1 :(得分:1)

你不能这样做。这需要像反射这样的东西,即forEach匿名函数应该知道每个callback函数的定义并获取其参数的名称(以及更重要的 - 顺序

但是,您可以执行以下操作:



var functionOne = function (o) {
  return o.id;
};
var functionTwo = function (o) {
  return o.id + ' ' + o.name;
};
var functionThree = function (o) {
  return o.id + ' ' + o.name + ' ' + o.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
      }
    ]
  }
];

// Now, are you able to generate `o` objects dynamically using something like:
obj.forEach(function (x) {
  var o = {};
  x.callbackParameters.forEach(function (p) {
    o[p.key] = p.value;
  });
  console.log(x.callback(o));
});




P.S。实际上,您可以动态获取函数参数的名称和顺序,但不想这样做
如果您对此仍感兴趣,请阅读this question