Javascript 在js中:如何获取包含函数所有参数(包括默认参数)的对象?

Javascript 在js中:如何获取包含函数所有参数(包括默认参数)的对象?,javascript,Javascript,我最近了解到ES6特性,它允许使用解构对象定义函数参数。像这样 function makeGenerator({type, max}) { //some code return something } 我非常喜欢这种方法,因为它允许我查看函数所需的参数,包括定义函数的位置和调用函数的位置。(非常适合自文档化代码!) 我将其与默认参数一起使用,如下所示: function makeGenerator({type = "natural", max = 10}) 这太棒了 但是 有时,出于

我最近了解到ES6特性,它允许使用解构对象定义函数参数。像这样

function makeGenerator({type, max}) {
  //some code
  return something
}
我非常喜欢这种方法,因为它允许我查看函数所需的参数,包括定义函数的位置和调用函数的位置。(非常适合自文档化代码!)

我将其与默认参数一起使用,如下所示:

function makeGenerator({type = "natural", max = 10})
这太棒了

但是

有时,出于调试目的(但不限于),我希望获得函数所有参数的摘要。然而:

function makeGenerator({type = "natural", max = 10}) {
  console.log(arguments[0])
}

makeGenerator({type = "fibanacchi"});
将输出:

{type: "fibanacchi"}
尽管在函数内部,我能够像预期的那样使用变量max,其默认值为10,但我真的希望在函数的所有参数与默认值合并后,都有一个摘要

也就是说,我希望上面的示例能够以某种方式输出:

{type: "fibanacchi", max: 10}
而不在函数定义之外的其他位置分别指定每个参数


有办法吗?

您可以获得stringed函数并使用正则表达式获取参数部分

函数getArguments(fn){ var string=fn.toString(), 计数=0, start=string.indexOf(“(”), i=开始; while(iconsole.log(getArguments(fn));无法在此处获取max的参数,因为未传递任何参数。您使用的功能正在按设计工作,因为它仅显示传递的参数


为了查看max的值,当它没有作为参数传递时,您需要显式地命名它。

您不能只记录
参数
而不是
参数[0]
?@ChrisRiebschlager-不,这不起作用。参数[0]是对象,它只显示一个属性,即fibanacchi。是否要将默认值与传递的参数合并,这就是您的问题的意思吗?我想在重读我的问题时可能会混淆。这实际上会打印:
{0':{type:'fibanacchi'}
@msoliman,是的。基本上,我想知道函数到达第一行时必须处理/期望的所有参数的值。我知道
参数
不能做到这一点。我希望会有其他对象引用函数definit括号中的对象离子。@TomKlino它不是一个对象。它不做OP想要做的事情,并且使用了一种脆弱的方式来获得结果,但有3个人投了票。呃……它确实帮助OP得到了他想要的东西:-)。只需要加入一个merge@nina,是否有一种方法可以以一种不太“黑客”的方式来实现这一点(我认为黑客是可以的,但除了调试之外,我可能不会使用这种方法)。函数对象中是否有可能到达那里的东西?我真的不明白这是怎么回事works@TomKlino:合并?用一根绳子?就像我在上面说的,它很粗糙。但是,由于它已经被破解了,您可以对它调用
JSON.parse()
,然后合并它。哈奇,不优雅,但工作。