【问题标题】:How to Print Function Signature in javascript如何在 javascript 中打印函数签名
【发布时间】:2013-09-26 07:37:32
【问题描述】:

我有一个函数:

fs.readFile = function(filename, callback) {
    // implementation code.
};

稍后我想在调试期间查看函数的签名。

当我尝试console.log(fs.readFile) 时,我得到[ FUNCTION ]

这并没有给我任何信息。

如何获取函数的签名?

【问题讨论】:

  • javascript中没有类型,所以没有太多的签名。
  • @Amberlamps 我能知道这个函数在它的签名中有多少个变量吗?虽然我们可以随心所欲地通过。
  • 由于缺少类型,您无法读取签名 ootb,但我认为 SO-answer 将帮助您构建一个辅助函数来检测签名。
  • @AshishNegi 你在使用 Node.js 吗?参见fs.readFile的文档:nodejs.org/api/fs.html#fs_fs_readfile_filename_options_callback
  • functionname.toString().match(/function\s*(.*?)\s*{/)[1]

标签: javascript node.js debugging


【解决方案1】:

特别是在 node.js 中,您必须在记录之前将函数转换为字符串:

$ node
> foo = function(bar, baz) { /* codez */ }
[Function]
> console.log(foo)
[Function]
undefined
> console.log(foo.toString())
function (bar, baz) { /* codez */ }
undefined
> 

或使用foo+""之类的快捷方式

【讨论】:

    【解决方案2】:

    如果你所说的“函数签名”是它定义了多少个参数,你可以使用:

    function fn (one) {}
    console.log(fn.length); // 1
    

    所有函数都会自动获得一个长度属性。

    【讨论】:

      【解决方案3】:

      我不确定您想要什么,但请尝试查看此小提琴的控制台日志,它会打印整个函数定义。我正在查看 chrome console.log 输出。

      var fs = fs || {};
      fs.readFile = function(filename, callback) {
        alert(1);
      };
      console.log(fs.readFile);
      

      DEMO http://jsfiddle.net/K7DMA/

      【讨论】:

      • 你说得对,调用函数对象的toString()后代码就可以了
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-22
      • 2011-08-03
      相关资源
      最近更新 更多