gpt4 book ai didi

javascript - 将 console.log 分配给另一个对象(Webkit 问题)

转载 作者:数据小太阳 更新时间:2023-10-29 04:39:27 25 4
gpt4 key购买 nike

我想让我的日志语句尽可能短,同时防止控制台在不存在时被访问;我提出了以下解决方案:

var _ = {};
if (console) {
_.log = console.debug;
} else {
_.log = function() { }
}

对我来说,这看起来非常优雅,并且在 Firefox 3.6 中运行良好(包括保留使 console.debugconsole.log 更有用的行号) .但它在 Safari 4 中不起作用。 [更新:或在 Chrome 中。所以这个问题似乎是 Firebug 和 Webkit 控制台之间的区别。] 如果我按照上面的

console.debug('A')
_.log('B');

第一个语句在两种浏览器中都工作正常,但第二个语句在 Safari 中生成“TypeError: Type Error”。这只是 Firebug 和 Safari Web 开发人员工具实现控制台方式的区别吗?如果是这样,这对 Apple 的 Webkit 来说是非常烦人的。将控制台函数绑定(bind)到原型(prototype)然后实例化,而不是直接将其绑定(bind)到对象,没有帮助。

当然,我可以从分配给 _.log 的匿名函数中调用 console.debug,但那样我会丢失我的行号。还有其他想法吗?

最佳答案

首先,如果 console 确实是未定义的(就像在 IE 等浏览器中一样),您将得到一个错误。您应该将其作为全局对象的属性进行检查,在浏览器中为 window。一般而言,在使用功能之前对其进行测试也是一个好主意,因此我为 debug 方法添加了一个测试。

可能 console.debug 在 Safari 中的实现依赖于其 this 的值是对 console 的引用,这将不是如果您使用 _.log 调用它(this 将改为引用 _)。完成快速测试后,情况似乎确实如此,以下解决了问题:

var _ = {};
if (typeof window.console != "undefined"
&& typeof window.console.debug == "function") {
_.log = function() {
window.console.debug.apply(window.console, arguments);
}
} else {
_.log = function() { }
}

关于javascript - 将 console.log 分配给另一个对象(Webkit 问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2619187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com