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

Posted

技术标签:

【中文标题】TypeError:console.log.apply 上的非法调用【英文标题】:TypeError: Illegal Invocation on console.log.apply 【发布时间】:2011-12-30 20:21:36 【问题描述】:

如果你在 chrome 控制台中运行它:

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

Chrome 会返回一个错误:

// TypeError: Illegal Invocation

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

【问题讨论】:

【参考方案1】:

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

这是预期的,因为 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

【讨论】:

如果需要作为函数使用,可以使用console.info.bind(console) 那么你能在所有支持 ES5 的浏览器中使用console.info.call(console, "stuff") 吗? 同样适用:console.info.apply(console, arguments) 相同的参数适用于其他函数,例如 console.log() 和 document.writeln()。因此,如果使用 call() 或 apply(),请始终提供正确的执行上下文。或者,使用 bind() 正如@JohnWilliams 指出的那样。 在没有打开 DevTools F12 的情况下,这仍然适用于 IE11/Edge。

以上是关于TypeError:console.log.apply 上的非法调用的主要内容,如果未能解决你的问题,请参考以下文章

小程序项目别的页面初始化拿到的值为两种状态(已解决)

Vue为数据根级添加属性,并使之成为反应式的。

小程序版本更新(uni-app)

React dva/dynamic 参数

Nodejs封装一个类似express框架的路由

无法读取未定义错误的属性“getState”