在方法函数中传递固定参数而不使用eval

时间:2013-07-17 05:44:21

标签: javascript methods

方案

我有一个“主要对象”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让我感到毛骨悚然。有没有更好的方法来做我不知道的事情?感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用bind进行部分申请:

User[X].Test = System.Test.bind(null, X);