有没有办法在 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" }
如果您要使用它,只需确保缓存正则表达式以提高性能即可。
谢谢布伯森 https://stackoverflow.com/a/14660057/1049693有关前两个正则表达式的提示
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)