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