una pasar parametros llamar globales funciones funcionalidades funcion entre ejemplo desde basicas javascript arguments inspection

llamar - pasar parametros a una funcion javascript desde html



Inspeccione los nombres/valores de los argumentos en la definición/ejecución de una función de JavaScript (5)

Aquí hay un pequeño módulo de nodejs para eso.

https://github.com/kilianc/node-introspect

Estoy buscando hacer el equivalente de inspect.getargspec() de Python en Javascript.

Sé que puede obtener la lista de arguments de una función de Javascript, pero lo que realmente estoy buscando son los nombres de los argumentos de la función definida originalmente.

Si esto es de hecho imposible, voy a tener que ''forzarla myFunc.toString() '' obteniendo la cadena de la función, es decir, myFunc.toString() y luego analizando ... dentro de la function myFunc(...) . ¿Alguien sabe cómo hacer este análisis de una manera general?

Gracias por cualquier consejo.


Aquí hay una versión que usa funciones de orden superior. Lo único que no me gusta de esto es que tiene que especificar parámetros como miembros de una matriz. Pero al menos solo tienen que ser especificados una vez.

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> var withNamedParams = function(params, lambda) { return function() { var named = {}; var max = arguments.length; for (var i=0; i<max; i++) { named[params[i]] = arguments[i]; } return lambda(named); }; }; var foo = withNamedParams(["a", "b", "c"], function(params) { for (var param in params) { alert(param + ": " + params[param]); } }); foo(1, 2, 3); </script> </head> <body> </body> </html>


La siguiente función devolverá una matriz de nombres de parámetros de cualquier función pasada.

function getParamNames(func) { var funStr = func.toString(); return funStr.slice(funStr.indexOf(''('')+1, funStr.indexOf('')'')).match(/([^/s,]+)/g); }

Ejemplo de uso:

getParamNames(getParamNames) // returns [''func''] getParamNames(function (a,b,c,d){}) // returns [''a'',''b'',''c'',''d'']


Si bien no puedo ver ninguna buena razón para esto,

var reg = //(([/s/S]*?)/)/; var params = reg.exec(func); if (params) var param_names = params[1].split('','');

Asumiendo que func es el nombre de tu función.


Versión mejorada de la respuesta de Jonathan Fingland:

// Utility function to extract arg name-value pairs function getArgs(args) { var argsObj = {}; var argList = //(([^)]*)/.exec(args.callee)[1]; var argCnt = 0; var tokens; while (tokens = //s*([^,]+)/g.exec(argList)) { argsObj[tokens[1]] = args[argCnt++]; } return argsObj; } // Test subject function add(number1, number2) { var args = getArgs(arguments); alert(args.toSource()); // ({number1:3,number2:4}) } // Invoke test subject add(3, 4);

Nota: esto solo funciona en navegadores que admiten arguments.callee .

(También publicado en Cómo obtener dinámicamente los nombres / valores de parámetros de funciones desde javascript )