当console.log在函数中传递时出现非法调用错误

Moz*_*zak 6 javascript google-chrome

我对此感到困惑.请找到如下代码.

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

o.printToConsole(console.log);
Run Code Online (Sandbox Code Playgroud)

//TypeError: Illegal invocation//我得到一个TypeError

从console.log的定义我们得到了这个

`function log() { [native code] }`
Run Code Online (Sandbox Code Playgroud)

在chrome中,它清楚地显示它不需要任何参数,但是当我们尝试在控制台上打印东西时,我们会这样写,即将参数传递给console.log.

console.log('Take me on Console');
Run Code Online (Sandbox Code Playgroud)

为什么我得到这个TypeError以及这个console.log在chrome中的行为?

Den*_*ret 12

更改

o.printToConsole(console.log);
Run Code Online (Sandbox Code Playgroud)

o.printToConsole(console.log.bind(console));
Run Code Online (Sandbox Code Playgroud)

要么

o.printToConsole(function(){ console.log.apply(console.log, arguments) });
Run Code Online (Sandbox Code Playgroud)

console.log函数仅在接收器(this)是控制台时才起作用(实际上,它取决于浏览器).