如何找出原生Javascript函数的参数

时间:2015-02-25 14:57:20

标签: javascript greasemonkey

我想要一种通用的方法来通过任何javascript函数找出所需的参数,包括本机函数,但我找不到。我已经看过这个stackoverflow链接,但它只适用于我们定义的函数。 toString()没有告诉我们像window.setTimeout()这样的本机函数的函数参数:

How to get function parameter names/values dynamically from javascript

我对像GM_setValue等GreaseMonkey方法特别感兴趣,它们的行为相似,并且在与toString()一起使用时不显示参数(我想验证传递给我的方法有两个参数)

1 个答案:

答案 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()

不是验证函数有两个参数,而是验证函数在测试中的行为符合您的期望。但是,一般来说,你应该只测试你刚才得到的东西确实是一个函数,然后简单地调用它。使用你给它的参数的责任应该在接收者(你刚刚调用的函数)中确保,而不是在调用者中。