有没有办法让任何函数输出一个console.log语句,当它通过在某处注册一个全局钩子(即,不修改实际函数本身)或通过其他方式调用?
是否有可能将Javascript函数的所有参数都写入接受?(我知道所有Javascript函数参数都是"可选的")?如果没有,是否可以获得参数的数量?例如,在PHP中,可以使用:
$class = new ReflectionClass('classNameHere');
$methods = $class->getMethods();
foreach ($methods as $method) {
print_r($method->getParameters());
}
Run Code Online (Sandbox Code Playgroud)
...或类似的东西,我有一段时间没有碰过PHP,所以上面的例子可能不正确.
提前致谢!
编辑:不幸的是,我必须能够在函数体外获取参数...对不起澄清,但感谢您当前的答案!
是否有调试系统允许我记录javascript函数调用及其参数?这将允许我在实时/客户端情况下跟踪和调试应用程序,而不会因手动记录而导致性能下降.
编辑:我不是在谈论使用"控制台"窗口手动调用函数并查看结果,或者手动将"trace"或"log"命令添加到我的javascript中.我需要它来处理任何正在运行的JavaScript.
当你在JavaScript中调用函数而你错过了传递一些参数时,没有任何反应.
这使代码更难调试,所以我想改变这种行为.
我已经看到 如何最好地确定一个参数是否没有发送到JavaScript函数, 但我想要一个具有恒定数量的类型代码行的解决方案; 没有为每个功能键入额外的代码.
我已经考虑过通过修改("first-class")Function对象的构造函数,自动为所有函数的代码添加前缀.
受JavaScript中的更改构造函数的启发 我首先测试了是否可以更改Function对象的构造函数,如下所示:
function Function2 () {
this.color = "white";
}
Function.prototype = new Function2();
f = new Function();
alert(f.color);
Run Code Online (Sandbox Code Playgroud)
但它警告"未定义"而不是"白色",所以它不起作用,所以我没有进一步探索这种技术.
你知道任何级别的这个问题的解决方案吗?破解JavaScript的内容是可以的,但是关于如何找到缺少的参数的任何其他实用技巧也是可以的.
javascript ×4
logging ×2
control-flow ×1
debugging ×1
function ×1
hook ×1
methods ×1
reflection ×1
trace ×1