2013-08-25 8 views
6

Jestem nieco zdezorientowany. Proszę znaleźć kod, jak poniżej.Błąd niedozwolonego wywołania, gdy console.log przeszedł w funkcję

var o={ 
printToConsole: function(f){ 
    f(1); 
} 
}; 

o.printToConsole(console.log); 

//TypeError: Illegal invocation // otrzymuję TypeError

Z definicji console.log otrzymujemy ten

`function log() { [native code] }` 

w Chrome, który wyraźnie wyświetla, że ​​nie ma żadnego argumentu, chociaż kiedy próbujemy drukować rzeczy na konsoli, piszemy tak, np. przekazujemy argument do console.log.

console.log('Take me on Console'); 

Dlaczego otrzymuję ten TypeError i jak ten console.log zachowuje się w chrome?

Odpowiedz

12

Zmień

o.printToConsole(console.log); 

do

o.printToConsole(console.log.bind(console)); 

lub

o.printToConsole(function(){ console.log.apply(console.log, arguments) }); 

Funkcja console.log działa tylko wtedy, gdy odbiornik (this) jest konsola (w rzeczywistości jest to przeglądarka zależny) .

+0

Masz rację. To zależy od przeglądarki. – Mozak

+0

Firefox wyświetla komunikat w konsoli bez wiązania go z konsolą. – Mozak

+1

Znaleźliśmy podobne pytanie http://stackoverflow.com/questions/8904782/uncaught-typeerror-ilegal-invocation-in-javascript – Mozak

Powiązane problemy