通用JavaScript方法,它根据参数调用其他方法

时间:2011-12-01 16:51:08

标签: javascript methods dojo

我有一个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"]);

3 个答案:

答案 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"]);

此处示例:http://jsfiddle.net/psoares/Zqp3h/9/