2013-08-25 26 views
6

これで少し混乱します。 以下のコードを見つけてください。console.logが関数で渡されたときに不正な呼び出しエラーが発生しました

//TypeError: Illegal invocation

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

o.printToConsole(console.log); 
は//私は、我々は明らかにそれがどんな引数を取らないことを表示し、クロムでは、この

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

を得るにconsole.logの定義からはTypeError

を取得しますコンソール上で何かを印刷しようとすると、console.logに引数を渡します。

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

なぜこのTypeErrorが発生し、このconsole.logがChromeでどのように動作するのですか?受信機(this)はコンソールがあるとき

答えて

12

変更

o.printToConsole(console.log); 

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

または

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

console.log機能のみ動作します(実際には、それはブラウザに依存します) 。

+0

あなたは正しいです。これはブラウザに依存します。 – Mozak

+0

Firefoxはコンソールにメッセージを表示せずに、コンソールにメッセージを表示します。 – Mozak

+1

同様の質問が見つかったhttp://stackoverflow.com/questions/8904782/uncaught-typeerror-illegal-invocation-in-javascript – Mozak

関連する問題