0

设想

我有一个“主要对象” 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() 的那一刻,它只是将循环中的最后一个键 XSystem.Test传递给函数,而不是每个 User[X] 对象唯一的 X。

丑陋的方式 - 问题

如果我可以使用eval ,解决方案似乎相当简单。

eval("User[X].Test = function(a, b) { return System.Test(" + X + ", a, b); }");

现在,这可以作为一个黑客。但这.Test只是一个例子,我无法想象一旦方法数量增加就使用几十个eval调用。尽管在eval中注入的唯一变量是X(我可以保证它X是在内部生成并且完全安全 - 没有恶意代码执行的风险) - eval 的使用让我毛骨悚然。有没有更好的方法来做到这一点,我不知道?谢谢。

4

1 回答 1

0

您可以bind用于部分应用:

User[X].Test = System.Test.bind(null, X);
于 2013-07-17T05:47:34.727 回答