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

gajydyqb  于 2023-04-04  发布在  Java
关注(0)|答案(2)|浏览(114)

我想要一个通用的方法来找出所需的参数由任何javascript函数,包括本机的,但我无法找到一个。我已经看到了这个stackoverflow链接,但它只适用于我们定义的函数。toString()不告诉我们有关本机函数的函数参数,如window.setTimeout():
How to get function parameter names/values dynamically from javascript
我特别感兴趣的是GreaseMonkey方法,比如GM_setValue等,它们的行为类似,并且在与toString()一起使用时不显示参数(我想验证传递给我的方法是否有两个参数)

bvjxkvbb

bvjxkvbb1#

你不能这么做。
可以通过检查函数的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()

不要验证一个函数有两个参数,只需在测试中验证该函数的行为符合您的预期。但是,通常情况下,您应该只测试您刚刚得到的确实是一个函数,然后简单地调用它。使用您给予它的参数的责任应该在接收方(您刚刚调用的函数),而不是在调用方。

baubqpgj

baubqpgj2#

原生函数是C中设计的函数。似乎要访问参数的名称,必须使用其他语言。在powershell或C#中,我们可以获得这些参数的类型。我很快就会回来,以获得更多信息,以获得C中原生JavaScript函数的完整接口。
Powershell代码示例:

$html = New-Object -ComObject 'HTMLfile';
$html.parentWindow.alert;  

# The result is : void alert (string);

相关问题