我想让我的日志语句尽可能短,同时防止控制台不存在时被访问;我想出了以下解决方案:
var _ = {};
if (console) {
_.log = console.debug;
} else {
_.log = function() { }
}
对我来说,这看起来相当优雅,并且在 Firefox 3.6 中效果很好(包括保留使console.debug
比更有用console.log
)。但它在 Safari 4 中不起作用。 [更新:或在 Chrome 中。所以问题似乎是 Firebug 和 Webkit 控制台之间的差异。] 如果我按照上面的操作
console.debug('A')
_.log('B');
第一个语句在两种浏览器中都可以正常工作,但第二个语句在 Safari 中生成“TypeError:类型错误”。这只是 Firebug 和 Safari Web 开发工具实现控制台的方式不同吗?如果是这样,那么 Apple 的 Webkit 就非常烦人了。将控制台函数绑定到原型然后实例化,而不是将其直接绑定到对象,没有帮助。
当然,我可以直接打电话console.debug
来自分配给的匿名函数_.log
,但随后我就会丢失我的行号。还有其他想法吗?
首先,如果console
确实是未定义的(就像在 IE 等浏览器中一样),你会得到一个错误。您应该将其作为全局对象的属性进行检查,即window
在浏览器中。一般来说,在使用功能之前对其进行测试也是一个好主意,因此我添加了一个测试debug
method.
可能的实施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() { }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)