Can you pass the function name as a parameter?

2

I am breaking my head here for a solution whose is to pass names of functions as parameters to be executed.

I have the ShowModal function in which its purpose is to call other functions and objects. How can I name the function for it to execute.

    $.showModal = function (idModal,idInputHidden,idNome,nameFunction,idOptional) {
    $(idModal).modal('show');
    if(idOptional == 'null'){
        $.setField(idInputHidden,idNome,idOptional);
    }else{
        $.nameFunction(idInputHidden,idNome);
    }
};

// Exemplo de uso Normal dela
$.showModal($('#myModalProduto'),$('#produto_modal_ctrl_id_key'),$('#produto_modal_ctrl_id'),'setFieldModalProduto',null);

//No Modal do Produto tenho a seguinte função setFieldModalProduto
$.setFieldModalProduto = function (a,b) {
            field1 =  $(a);
            field2 =  $(b);
        };
    
asked by anonymous 09.09.2016 / 00:20

1 answer

1

Because they are first-class objects, functions can be object properties or even arrays.

If you have not defined who the function belongs to (object or other variable) it will belong to the object window :

function chamaOutra(nome_funcao, parametro){
  window[nome_funcao](parametro);
}

function myAlert(parametro){
   alert(parametro);
}

chamaOutra("myAlert", "Teste 1");

If you defined who it belongs to, for example, a variable to group the functions, just enter the variable "father" before the function:

   

var chamaOutra = function (nome_pai, nome_funcao, parametro){
  window[nome_pai][nome_funcao](parametro);
}

var mensagens = {}
mensagens.myAlert = function (parametro){
      alert(parametro);
}

chamaOutra("mensagens", "myAlert", "Teste 2");

In this answer , I found a function that I think might be interesting for you:

// lista com suas funções
var mensagens = {}
mensagens.myAlert = function (parametro){
      alert(parametro);
}

// função para chamar outras
function executeFunctionByName(functionName, context /*, args */) {
  var args = [].slice.call(arguments).splice(2);
  var namespaces = functionName.split(".");
  var func = namespaces.pop();
  for(var i = 0; i < namespaces.length; i++) {
    context = context[namespaces[i]];
  }
  return context[func].apply(context, args);
}

// chamando outra função
executeFunctionByName("mensagens.myAlert", window, "Teste 3");

As commented by @bfavaretto, you can also pass as an argument, however in this case, you can not use a string as a parameter:

// lista de funções 
var  myAlert = function(my_parametro){
   alert(my_parametro);
}

// função para chamar outras
function chamaOutras(funcao, parametro){
    if(typeof(funcao)=="function"){
        funcao.call();
    }
}

// chamando outras
chamaOutras(myAlert("Teste 4"));
    
09.09.2016 / 00:34