2016-06-14 13 views
0

Ich frage mich, warum der folgende Code gibt einen Illegal Invocation FehlerIllegal Invocation, lodash

_.flow(console.log) (123) // Illegal Invocation 

function log(){ _.each(arguments, function(o) { console.log(o) }); } 
_.flow(log) (123) // 123 

das Lauf auf Chrome Version 49.0.2623.112 (64-Bit) mit lodash v4.13.1

zu Ich habe dies auf den Entwicklertools in Chrome ausgeführt, indem ich Ctr+Shift+J auf lodash's documentation page

Antwort

0

Aktualisierte Antwort, basierend auf Feedback.

console.log muss ordnungsgemäß aufgerufen werden - mit anderen Worten muss es den richtigen this Wert haben, wenn sie aufgerufen wird. Nennen Sie es als eine Methode von console ist eine Möglichkeit, aber bind kann auch verwendet werden.

Beispielcode (aus meinen Browser-Konsole)

// Give us a test function 
function ctest(console) { console("It worked") } 
ctest(console.log); // This fails 

// Set up a properly bound reference 
var clog = console.log.bind(console); 
ctest(clog); // This works. 

Old Snippet entfernt

+0

Dankten ich die Frage aktualisiert. Ich bin überrascht, dass Ihr Schnipsel funktioniert. Was mich mehr fasziniert. – jkris

+0

ok Ich habe beim graben etwas gefunden, was dazu führen könnte, dass dein Snippet NICHT funktioniert, aber klar ist es ... was ist dein Geheimnis! http://stackoverflow.com/questions/8159233/typeerror-illegal-invocation-on-console-log-apply – jkris

+0

Ich wette, der Unterschied ist - "console.log" wird von der Snippet-Umgebung und es ruft nicht den echten Browser an. Hmm .. dachte nicht daran. Ich muss später testen/erkunden. –