我有一个Javascript方法需要两个参数 - 第一个是应该执行的函数的名称,第二个是我需要传递给我需要执行的函数的params数组。 基本上我需要使它成为通用函数。我可以使用Dojo以高效的方式实现这一目标吗?以下是我的功能。
function UserDetails(){
this.invokeCustomFunction=function(fnToBeExecuted,arraysOfParams){
//This function is expectetd to execute the "fnToBeExecuted" and pass the "arraysOfParams" to it.
}
this.getUserDetails=function(userName){
}
this.getSalaryDetails=function(userId,EmployerName){
}
}
//This is how I invoke it.
UserDetails userDetails=new UserDetails();
userDetails.invokeCustomFunction("getUserDetails","Sally");
userDetails.invokeCustomFunction("getSalaryDetails",["Sally","ATT"]);
答案 0 :(得分:7)
你的例子并不清楚你为什么要这样做,但如果你真的这样做,那么:
this.invokeCustomFunction=function(fnToBeExecuted,arraysOfParams){
this[fnToBeExecuted].apply(this, arraysOfParams)
}
答案 1 :(得分:2)
您不需要自定义功能。
您只需要索引符号:
userDetails["getUserDetails"]("Sally");
userDetails["getSalaryDetails"]("Sally", "ATT");
答案 2 :(得分:1)
试试这个:
dojo.declare("UserDetails", null, {
invokeCustomFunction : function(fnToBeExecuted,arrayOfParams){
if (arrayOfParams instanceof Array) {
dojo.hitch(this, fnToBeExecuted).apply(dojo.global, arrayOfParams);
} else {
dojo.hitch(this, fnToBeExecuted)(arrayOfParams);
}
},
getUserDetails : function(userName){
console.log("getting user details for ", userName);
},
getSalaryDetails : function(userId,EmployerName){
console.log("getting salary details for ", userId);
}
});
var userDetails=new UserDetails();
userDetails.invokeCustomFunction("getUserDetails","Sally");
userDetails.invokeCustomFunction("getSalaryDetails",["Sally","ATT"]);