方案
我有一个“主要对象”System
,其中包含一个名为System.Test
的方法。例如,它接受三个参数System.Test(id, a, b)
。
现在我有很多对象(User[1]
,User[2]
,User[3]
...),我还希望.Test
方法可用。但是,它传递的id
参数对于每个User[X]
对象都是唯一的,应该是固定的,例如,如果我调用User[1].Test(a, b)
它应该自动映射到System.Test(1, a, b)
。
到目前为止我做了什么
User[X]
个对象的数量是可变的。假设我正在循环遍历它们,并且我将它们的ID放在一个名为id
(= 1,2,3 ......)的变量中。我尝试在循环中使用此代码。
User[X].Test = function(a, b) {
return System.Test(X, a, b);
}
但是,这不能按预期工作。在调用User [X] .Test()时,它只是传递给System.Test
函数循环中的最后一个键而不是每个用户[X]的唯一X对象
丑陋的方式 - 问题
如果我可以使用 eval ,解决方案似乎相当简单。
eval("User[X].Test = function(a, b) { return System.Test(" + X + ", a, b); }");
现在,这可以作为一个黑客。但.Test
只是一个例子,一旦方法数量增加,我就无法想象会使用几十个 eval 调用。虽然在 eval 中注入的唯一变量是X
(我可以保证X
在内部生成且完全安全 - 没有恶意代码执行的风险) - 使用eval让我感到毛骨悚然。有没有更好的方法来做我不知道的事情?感谢。
答案 0 :(得分:0)
您可以使用bind
进行部分申请:
User[X].Test = System.Test.bind(null, X);