我正在尝试创建一个泛型函数,您可以在其中传递具有随机函数属性的对象。有了这个,您应该能够设置一个属性,说明函数的每个参数的键和值。
然后,通用函数应该调用这个"随机"具有所有参数的功能。但是我不太清楚怎么做?
$credentials = Get-Credential
Login-AzureRmAcoount -Credential $credentials
$SubscriptionName
Select-AzureRmSubscription -SubscriptionName "The name of your subscription"
Select-AzureRmSubscription -SubscriptionName $SubscriptionName
答案 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。