¿Cómo obtener dinámicamente los nombres/valores de los parámetros de la función javascript?

Dada cualquier función de JavaScript arbitraria y la tarea es devolver los nombres de los parámetros de la función. 

Enfoque: JavaScript contiene un método llamado Function.toString() que se usa para representar un código de función en su representación de string. Este método se utiliza para obtener los nombres/valores de los parámetros. 

  • Primero, obtenga el código de la función en su string equivalente usando el método toString().
  • Luego elimine todos los códigos innecesarios como comentarios, cuerpo de función, espacios en blanco y flecha ES6 (si corresponde).
  • Identifique la primera aparición de ‘(‘, será justo antes del inicio de los parámetros.
  • El último carácter de la string será ‘)’, que elimina todos los comentarios, el cuerpo de la función, los espacios en blanco y la flecha ES6.
  • Además, el último carácter estará justo después del final de los parámetros.

Ejemplo: 

Javascript

<script>
 
// JavaScript program to get the function
// name/values dynamically
function getParams(func) {
         
    // String representation of the function code
    var str = func.toString();
 
    // Remove comments of the form /* ... */
    // Removing comments of the form //
    // Remove body of the function { ... }
    // removing '=>' if func is arrow function
    str = str.replace(/\/\*[\s\S]*?\*\//g, '')
            .replace(/\/\/(.)*/g, '')        
            .replace(/{[\s\S]*}/, '')
            .replace(/=>/g, '')
            .trim();
 
    // Start parameter names after first '('
    var start = str.indexOf("(") + 1;
 
    // End parameter names is just before last ')'
    var end = str.length - 1;
 
    var result = str.substring(start, end).split(", ");
 
    var params = [];
 
    result.forEach(element => {
         
        // Removing any default value
        element = element.replace(/=[\s\S]*/g, '').trim();
 
        if(element.length > 0)
            params.push(element);
    });
     
    return params;
}
 
// Test sample functions
var fun1 = function(a){ };
 
function fun2(a = 5*6/3, // Comment
    b){ };
 
var fun3 = (a, /*
    */
    b, //comment
    c) => /** */{ };
 
console.log(`List of parameters of ${fun1.name}:`, getParams(fun1));
console.log(`List of parameters of ${fun2.name}:`, getParams(fun2));
console.log(`List of parameters of ${fun3.name}:`, getParams(fun3));
</script>

Producción: 

List of parameters:
List of parameters of fun1: [ 'a' ]
List of parameters of fun2: [ 'a', 'b' ]
List of parameters of fun3: [ 'a', 'b', 'c' ]

Publicación traducida automáticamente

Artículo escrito por Vinod Tahelyani y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *