javascript - console.log 的包装器 - 非法调用

标签 javascript

我正在尝试为 console.log 编写一个包装器。

我在函数原型(prototype)中找到了 .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)

我尝试这样做的方式有什么问题吗?并且,怎样做才是正确的呢?谢谢。

最佳答案

console.log 期望作为 console 的方法调用,即使用 console 作为接收者(this 参数,apply 的第一个参数)。目前,您正在将 this 传递给 apply,无论 this 是什么(可能是全局对象),它都不是 console 对象。使用

function _log() {
    if (opts.debug) console.log.apply(console, arguments);
//                                    ^^^^^^^
}

关于javascript - console.log 的包装器 - 非法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31817754/

相关文章:

javascript - 将单个值传递给每个元素的解决方案

javascript - jquery 文件上传 - 粘贴时禁用上传 - 'fileuploadpaste' - 如何?

javascript - 超出 Grunt CSS minifier 调用堆栈

javascript - 如何让我的 Javascript 只显示一个以鼠标为中心的聚光灯?

javascript - 如何从 Addon SDK 将进度监听器添加到选项卡对象

javascript - 如何一次开发实现网站、Android应用程序和Iphone应用程序?

javascript - 根据下拉选择mysqli自动填充文本输入字段

javascript - 这个正则表达式有什么作用(/"([^"]+(? ="))"/g, '$1' )?

javascript - 网站顶部的动画导航背景

javascript - 总是得到错误的单选按钮值。怎么了?