我正在尝试为console.log
编写一个包装器。
我在Function原型中找到了.apply
函数,但它给了我错误:
function _log() {
if (opts.debug) console.log.apply(this, arguments);
}
opts.debug
是我的配置数组中的一个键。
错误:
Uncaught TypeError: Illegal invocation at :2:13 at Object.InjectedScript._evaluateOn (:905:140) at Object.InjectedScript._evaluateAndWrap (:838:34) at Object.InjectedScript.evaluate (:694:21)
我尝试这样做的方式有什么问题?而且,怎么做对了?感谢。
答案 0 :(得分:3)
console.log
期望被称为console
的方法,即console
用于接收方(this
参数,第一个参数为apply
)。目前您正在将this
传递给apply
,无论这是什么(可能是全局对象),它都不是console
对象。使用
function _log() {
if (opts.debug) console.log.apply(console, arguments);
// ^^^^^^^
}
答案 1 :(得分:2)
您在无效范围内调用console.log
方法,为了使其有效,您必须在console
的范围内调用它:
function _log() {
if (opts.debug) console.log.apply(console, arguments);
}
经过多次测试后,似乎@Rob M.对他的评论是正确的。绑定必须使用console
范围。