4

Google Closure Library とそのコンパイラを使用してアプリケーションを作成しています。値をデバッグするには、 を使用しますconsole.log()。これをコンパイルすると、次の例外がスローされますJSC_UNDEFINED_VARIABLE. variable console is undeclared at ...。このエラーを解決するには、window.console.log()代わりに使用する必要がありました。
関数にかかる時間も測定したいと思います。Firebug には 2 つの優れた機能がconsole.time(name)ありconsole.timeEnd(name)、それを非常に簡単に行うことができます。残念ながら、Closure Compiler はこれらの関数をサポートしておらず、次の警告がスローされますJSC_INEXISTENT_PROPERTY. Property time never defined on Window.prototype.console at ...。残念ながら、この警告を prepending で解決することはできません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);

非常に頻繁に使用する場合、これは少し多すぎるコードであり、2 つの機能を備えたバージョンが最適です。

window.console.time("timeTaken");
// do something
window.console.timeEnd("timeTaken");

これにより、開始と終了の間の MS が出力されます。しかし、前述のように、これはクロージャ コンパイラでは機能しません。window.console.time()これらの2つの機能をどのように使用できますwindow.console.timeEnd()か? それとも、 goog.closure が提供する別の解決策が見つかりませんか?

4

2 に答える 2

4

使用しているexternsにそれらを追加するだけです。

于 2011-10-20T16:20:09.427 に答える
1

extern を使用したくない/使用できない場合は、文字列ベースのプロパティを使用して「宣言されていない」オブジェクトを簡単に参照できます。

window['console']['log']('Hello Console!');
window['console']['time']('timeTaken');
...

timeただし、プロパティが存在しない場合や関数ではない場合、2 行目でエラーが発生する可能性があるため、注意が必要です。

于 2012-11-10T17:09:14.853 に答える