Общий метод JavaScript, который вызывает другие методы на основе аргументов - PullRequest
1 голос
/ 01 декабря 2011

У меня есть метод Javascript, который ожидает два аргумента - первый - это имя функции, которая должна быть выполнена, а второй - массив параметров, которые мне нужно передать функции, которую нужно выполнить. По сути, мне нужно сделать это универсальной функцией. Могу ли я достичь этого гораздо более эффективным способом с помощью 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 ]

7 голосов
/ 01 декабря 2011

В вашем примере неясно, почему вы хотите это сделать, но если вы действительно это сделаете, то:

this.invokeCustomFunction=function(fnToBeExecuted,arraysOfParams){
    this[fnToBeExecuted].apply(this, arraysOfParams)
}
2 голосов
/ 01 декабря 2011

Для этого вам не нужны пользовательские функции.

Вам просто нужна запись индексатора:

userDetails["getUserDetails"]("Sally");
userDetails["getSalaryDetails"]("Sally", "ATT");
1 голос
/ 01 декабря 2011

Попробуйте это:

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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...