TypeError:console.log.apply上的非法调用


129

如果您在chrome控制台中运行此命令:

console.log.apply(null, [array])

Chrome给您返回错误:

// TypeError: Illegal Invocation

为什么?(通过OSX在Chrome 15上测试)

Answers:


180

当执行上下文从控制台更改为任何其他对象时,它可能不起作用:

这是可以预期的,因为console.info希望其“ this”引用是控制台,而不是窗口。

console.info("stuff")
stuff
undefined
console.info.call(this, "stuff")
TypeError: Illegal invocation
console.info.call(console, "stuff")
stuff
undefined

此行为是预期的。

https://bugs.chromium.org/p/chromium/issues/detail?id=48662


25
如果需要用作功能,则可以使用console.info.bind(console)
John Williams

3
这样您可以console.info.call(console, "stuff")在所有支持ES5的浏览器中使用吗?
mucaho

2
同样适用:console.info.apply(console, arguments)
PeterM '16

相同的参数适用于其他功能,例如console.log()和document.writeln()。因此,如果使用call()或apply(),请始终提供正确的执行上下文。或者,使用@JohnWilliams指出的bind()。
艾伦CS

1
当未打开DevTools F12时,这仍适用于IE11 / Edge。
Benny Bottema
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.