我一直在尝试动态调用JS中的函数。在我目前的情况下,我正在使用eval
来构建并根据其父级参数调用正确的函数名称。这是一个例子:
在Comments
“类”中:
$scope.getComments = function(id) {
return getApiData(id, "comments");
};
getApiData = function(id, field) {
eval("BackendApi.get" + (field.capitalize()) + "(" + id + ")");
// do something else with `field` down here
};
BackendApi
是一个简单的REST服务。我试图动态调用这些函数的原因是因为我发现自己编写了大量重复代码。我read eval
通常被认为是不良做法,可能与糟糕的表现有关。在上面的例子中,我将尝试使用以下语法调用函数:
BackendApi.getComments(:id);
请注意,Comments#$scope.getComments
和BackendApi#getComments
为其各自的“类”共享相同的函数名称。我遇到的最大问题是"get" + field
部分。是否可以调用getApiData
而不是"get"
的调用函数的名称加上静态字段名作为参数?我很感激帮助,如果我歪曲了JS的任何部分,我会道歉。
答案 0 :(得分:1)
您可以使用数组表示法按名称访问属性:
getApiData = function(id, field) {
return BackendApi['get' + field.capitalize()](id);
}