2016-03-08 4 views
0
var fun1=function(){console.log('hello');} 
var fun2=fun1 
console.log(fun2); 

Приведенный выше код работает в Firefox отпечатков fun2. В Chrome он печатает тело функции, в Node.js он печатает Function.Как распечатать функции в Node.js так же, как Firefox печатает функции (а именно, дать имя)?

Почему это различие?

Как я могу получить поведение Firefox в Node.js?

Почему я спрашиваю об этом?

Я спрашиваю об этом, потому что хотел бы отладить JS-код, сгенерированный из Idris, где время выполнения JS использует стек вызовов explicit, и я хотел бы напечатать контент-столбец значимым образом, и Firefox делает это лучше, но я хочу для отладки кода на Node.js, поэтому я хотел бы получить Node.js для печати функций как Firefox, как я могу это сделать?

EDIT:

Типичная скомпилирован функция выглядит следующим образом:

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_ для вышеуказанной функции?

EDIT 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');} 
> 
+0

Попробуйте 'console.log (fun2 + '');' –

ответ

1

вам нужно, чтобы преобразовать его в строку попробовать это:

console.log(fun2.toString()); 
+0

Спасибо, это печатает тело функции, но не 'fun2'. – jhegedus

1

UPDATE: Работает также с 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()); 

Выходного

enter image description here

Надеется, что это помогает!

+0

Привет, спасибо, это печатает тело функции, но не 'func2' (то, что Firefox печатает), и это будет полезное имя, чтобы знать. – jhegedus

+0

Спасибо, я получаю это: http://lpaste.net/154241 – jhegedus

+0

Другими словами 'fun.name' печатает пустую строку. Действительно странно. – jhegedus