6

我对此有点困惑。请找到如下代码。

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

o.printToConsole(console.log);

//TypeError: Illegal invocation// 我得到一个类型错误

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

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

在 chrome 中,它清楚地表明它不需要任何参数,尽管当我们尝试在控制台上打印东西时,我们确实是这样写的,即将参数传递给 console.log。

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

为什么我会收到此 TypeError 以及此 console.log 在 chrome 中的行为方式?

4

1 回答 1

12

改变

o.printToConsole(console.log);

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

或者

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

console.log功能仅在接收器 ( this) 是控制台时才有效(实际上,它取决于浏览器)。

于 2013-08-25T06:36:12.290 回答