我正在使用Google Closure Library及其编译器创建一个应用程序。要调试值,我使用console.log()
。编译它将抛出以下异常JSC_UNDEFINED_VARIABLE. variable console is undeclared at ...
。要解决此错误,我只需使用window.console.log()
代替
我还想测量一个函数的时间。 Firebug有两个很好的函数console.time(name)
和console.timeEnd(name)
来做到这一点非常容易。不幸的是,Closure Compiler不支持这些函数抛出以下警告JSC_INEXISTENT_PROPERTY. Property time never defined on Window.prototype.console at ...
。很遗憾,您无法通过预先window
来解决此警告
我也看了一下这个库,但goog.debug.Console没有我需要的功能。
我之前使用的另一个解决方案是类似下面的
var start = new Date();
// do something
var end = new Date();
// do some calculation to get the ms for both start and end
var startMS = ....;
var endMS = .....;
// get the difference and print it
var difference = (endMS - startMS) / 1000;
console.log('Time taken for something: ' + difference);
这是一个有点太多的代码,如果你经常使用它,并且具有这两个函数的版本会很棒:
window.console.time("timeTaken");
// do something
window.console.timeEnd("timeTaken");
这会在开始和结束之间打印出MS。但是如上所述,这不适用于闭包编译器。有没有人有这方面的解决方案,我如何使用这两个函数window.console.time()
和window.console.timeEnd()
?或者goog.closure提供的另一个解决方案,但我还没找到?
答案 0 :(得分:4)
您只需将它们添加到您正在使用的外部。
答案 1 :(得分:1)
如果您不想/不能使用externs,您可以使用基于字符串的属性轻松引用“未声明”对象:
window['console']['log']('Hello Console!');
window['console']['time']('timeTaken');
...
但是你必须要小心,因为如果time
属性不存在或者它不是函数,第二行可能会抛出错误。