在JavaScript中,可以通过arguments
获取传递给函数的参数列表,这是一个类似数组的对象:
>> function fun(a, b, c) { console.log(arguments) };
undefined
>> fun(1, 2, 3);
[1, 2, 3]
是否有办法获取包含每个参数的正式名称的对象? 也就是说,如果一个人调用上面的函数,他应该得到:
{a = 1, b = 2, c = 3}
答案 0 :(得分:4)
对于某些浏览器,您可以根据函数的toString
表示形式as described in this question从已定义的参数中解析参数名称。您可以使用它来自己映射值。
请注意,并非所有参数都必须被命名,例如,如果我要调用上面的函数,fun(1, 2, 3, 4)
最后一个参数不会映射到任何名称,但仍然可以通过{{ 1}}
答案 1 :(得分:4)
我不建议这样做,因为如果代码被缩小并且压缩器/混淆器将重命名函数参数,您可能会丢失一些数据。
答案 2 :(得分:1)
那不存在。您可以将参数作为对象传递。
答案 3 :(得分:1)
正式参数的名称不能从运行时获得(编辑,除非作为函数toString()
值中文本的一部分,正如@David Hedlund指出的那样),但参数值可通过arguments
对象获得。如果你在一个函数中编写代码,那么当然你知道名字,所以你可以自己构建这样一个对象:
function foo(a, b, c) {
return {a: a, b: b, c: c};
}
答案 4 :(得分:0)
是否有办法获取包含每个参数的正式名称的对象?
没有。形式参数与声明的变量基本相同。每个执行上下文都有一个关联的变量对象(ed3)或环境记录(ed 5),声明变量和形式参数属于。
您无法访问该对象,因此您无法检查它以查看它具有的属性。
在全局执行上下文中,变量是全局对象的属性,但不在函数执行上下文中。并且没有正式的方法来区分变量和全局对象的其他属性。