我想要一种通用的方法来通过任何javascript函数找出所需的参数,包括本机函数,但我找不到。我已经看过这个stackoverflow链接,但它只适用于我们定义的函数。 toString()没有告诉我们像window.setTimeout()这样的本机函数的函数参数:
How to get function parameter names/values dynamically from javascript
我对像GM_setValue等GreaseMonkey方法特别感兴趣,它们的行为相似,并且在与toString()一起使用时不显示参数(我想验证传递给我的方法有两个参数)
答案 0 :(得分:1)
你不能这样做。
您可以通过检查函数的length
属性来检查函数接受的命名参数的数量:
(function testFn (arg1, arg2) {}).length // Will be 2
或者您可以将函数的主体转换为字符串并解析文本。
但是,命名函数参数不以任何方式与所需参数相关联。请考虑以下事项:
function testFn (arg1, arg2) {
arg1 = arg1 || 'some default'
arg2 = arg2 || true
}
// Both work fine
testFn() // No args passed
testFn('customValue', false) // Args passed
function anotherFn () {
var arg1 = arguments[0] // Discouraged! Just an example
arg1.toString() // Do stuff with a required arg1 argument
}
// This will throw at you!
anotherFn()
不是验证函数有两个参数,而是验证函数在测试中的行为符合您的期望。但是,一般来说,你应该只测试你刚才得到的东西确实是一个函数,然后简单地调用它。使用你给它的参数的责任应该在接收者(你刚刚调用的函数)中确保,而不是在调用者中。