有没有办法在 JavaScript 中检索函数的默认参数值?
function foo(x = 5) {
// things I do not control
}
这里有办法得到x
的默认值吗?最理想的情况是:
getDefaultValues(foo); // {"x": 5}
请注意,toString
函数将不起作用,因为它会在不常量的默认值上中断。
最佳答案
由于我们在 JS 中没有经典的反射,正如您可以在 C#、Ruby 等上找到的那样,我们必须依靠我最喜欢的工具之一,即正则表达式,来为我们完成这项工作:
let b = "foo";
function fn (x = 10, /* woah */ y = 20, z, a = b) { /* ... */ }
fn.toString()
.match(/^function\s*[^\(]*\(\s*([^\)]*)\)/m)[1] // Get the parameters declaration between the parenthesis
.replace(/(\/\*[\s\S]*?\*\/)/mg,'') // Get rid of comments
.split(',')
.reduce(function (parameters, param) { // Convert it into an object
param = param.match(/([_$a-zA-Z][^=]*)(?:=([^=]+))?/); // Split parameter name from value
parameters[param[1].trim()] = eval(param[2]); // Eval each default value, to get strings, variable refs, etc.
return parameters;
}, {});
// Object { x: 10, y: 20, z: undefined, a: "foo" }
如果您要使用它,只需确保缓存正则表达式以提高性能。
感谢bubersson有关前两个正则表达式的提示
关于javascript - 获取函数的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32934617/