【问题标题】:How can I print functions in Node.js the same way Firefox prints functions (namely giving a name)?如何像 Firefox 打印函数一样在 Node.js 中打印函数(即给出名称)?
【发布时间】:2016-03-08 15:11:16
【问题描述】:
var fun1=function(){console.log('hello');}
var fun2=fun1
console.log(fun2);

上面的代码在 Firefox 中运行会打印出fun2。在 Chrome 中它打印函数体,在 Node.js 中它打印 Function

为什么会有这种差异?

如何在 Node.js 中获取 Firefox 的行为?

我为什么要问这个?

我问这个是因为我想调试从 Idris 生成的 JS 代码,其中 JS 运行时使用 explicit 调用堆栈,并且我想以有意义的方式打印调用堆栈内容,而 Firefox 做得最好,但我想在 Node.js 上调试代码,因此我想让 Node.js 将函数打印为 Firefox,我该怎么做?

编辑:

一个典型的编译函数如下所示:

var _idris__123_io_95_bind2_125_ = function(oldbase){
  var myoldbase = new i$POINTER();
  i$valstack_top += 1;
  i$ret = new i$CON(65646,[i$valstack[i$valstack_base],i$valstack[i$valstack_base + 1],i$valstack[i$valstack_base + 2],i$valstack[i$valstack_base + 3],i$valstack[i$valstack_base + 4],i$valstack[i$valstack_base + 5]],_idris__123_APPLY0_125_$65646,null);
  i$valstack_top = i$valstack_base;
  i$valstack_base = oldbase.addr;
}

所以这里有用的信息是变量名_idris__123_io_95_bind2_125_本身,这是Firefox打印的,而不是node.js打印的,这就是问题所在,Firfox打印有用的信息,node.js确实不是。

所以问题是,我怎样才能让node.js 为上述功能打印_idris__123_io_95_bind2_125_

编辑 2:

不幸的是,尝试一些建议不起作用:

>cat deb.js
var fun1=function(){console.log('hello');}
var fun2=fun1
console.log(fun2);
console.log(fun2.name);
console.log(fun2.toString());
console.log(fun2+'');
>node deb.js
[Function]

function (){console.log('hello');}
function (){console.log('hello');}
>

【问题讨论】:

  • 试试console.log(fun2 + '');

标签: javascript node.js firefox-developer-tools idris


【解决方案1】:

你需要把它转换成字符串试试这个:

console.log(fun2.toString());

【讨论】:

  • 谢谢,这会打印函数体,但不会打印fun2
【解决方案2】:

更新:也适用于 v0.12.7。所以我想它适用于所有节点版本。

在节点下面的作品中

function someCoolFuntion (){
    /* Some code */
}
var fun1 = someCoolFuntion;

//Show name; Similar to Firefox's behaviour!
console.log(fun1.name)

//Show fullbody; Chrome's behaviour (as shaouari suggested)
console.log(fun1.toString());

输出

希望这会有所帮助!

【讨论】:

  • 嗨,谢谢,这会打印函数体,但不会打印 func2(Firefox 打印的内容),这将是有用的名称。
  • 换句话说,fun.name 打印一个空字符串。真奇怪。
  • 哦,这将是预期的行为,:( ...因为函数类似于var x = function () ....x.name 将打印函数名称。意思是,var x = function abc() ...x.name 将打印@987654330 @. 有道理吗?我仍在调查此事。只是想传达这是预期的行为。:)
  • 是的,我同意,Firefox 这样做的方式和原因有点奇怪,但它似乎非常有用,因此这个问题。在 node.js 中也有这个功能会很好。
  • @jhegedus ...据我所知并理解。无法以编程方式访问variable name,尽管可以列出给定函数的参数名称,但无法提取变量名称(如您所期望的 --- firefox 之类):( 因为,@ 987654332@ 被传递,而不是 variable 是 self,意思是:var x = function(){} 当我这样做时 console.log(x) 它只是传递了 function(){} 参考并且没有 x 的痕迹。
猜你喜欢
  • 1970-01-01
  • 2018-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多