2016-04-14 4 views
0

私はGoogleの閉鎖コンパイラ、ADVANCEDモードの奇妙な行動につまずいてきた、と私は説明を見つけることができません:それは問題が本番でarised以来CanvasRenderingContext2DCanvasRenderingContext2D resetTransformとGoogleの閉鎖コンパイラ

の機能resetTransformの名前を変更コード私はここに、コピー&ペーストすることはできませんが、私はここで、明確な問題スニペット https://www.dropbox.com/s/ic9l755dvgkkqv7/case.zip?dl=0

場合の問題を再現することができましたです:

context.resetTransform() 
context.translate (0 , canvas.height) 
c.a();c.translate(0,b.height); 

私は間違っていない場合は、resetTransform翻訳し、それは例えば、CanvasRenderingContext2Dの他のメンバーに起こる同じように、その名前を維持する必要があります:コンパイラの出力に対応して。 ブラウザは "a"関数を見つけられず、 "TypeError:caは関数ではありません"

"c"は事実上CanvasRenderingContext2Dのインスタンスです。実際にはcaをc.resetTransformに変更すると、スクリプトは完璧に動作します。

何が間違っていますか?

は、この問題についての言及を発見したどこにでも

現在、私はからダウンロードした最新のコンパイラのバージョン、使用しています:

JavaのバージョンSI 1.7.0_80を https://dl.google.com/closure-compiler/compiler-latest.zip

を、しかし、問題はさらに古いものと持続します

+0

ところで、あなたはおそらく「JavaScriptの」質問ではなく、「ジャワ」(もちろんの閉鎖コンパイラはJavaで書かれたが、あなたの質問にはJavaScript程度です)として、これをタグ付けする必要があります。 – owler

答えて

1

resetTransformはmozilla.orgにexperimental featureとしてマークされています。なぜそれがclosure_compiler/externs/browser/html5.jsにまだ存在しないのかを説明しています。したがって、クローズコンパイラはその名前を縮小しないことを知らない。

あなたはbuild closure-compiler from source(そのかなり簡単行うには)あなたが

/** 
* @return {undefined} 
*/ 
CanvasRenderingContext2D.prototype.resetTransform = function() {}; 

ようhtml5.js何かに追加することができ、その後、コンパイラを再構築することができます。 IIRCでは、externsファイルへの変更が有効になるようにコンパイラを再構築する必要があります。

追加されたAPIを使用して、https://github.com/google/closure-compiler/issues/に問題またはプルリクエストを送信することもできます。

resetTransformを高度なコンパイルモードで縮小しないで呼び出す方法があるかもしれません。 Closure-compilerは大括弧で囲まれたプロパティを縮小しません。

(/** Function */mycontext['resetTransform'])(); 

これは決して試したことがありませんが、これはうまくいくと思います。クロージャコンパイラを構文に満足させるための正確な式は、いくつかの微調整が必​​要な場合があります。


instructions for building closure-compilerは、現時点では少し台無しです。ここではいくつかの基本的な手順です:

は閉鎖コンパイラリポジトリのローカルコピーを取得します。

git clone https://github.com/google/closure-compiler.git 

その後

git pull 

ビルドで必要に応じて、あなたのコピーを更新することができます上の

ant clean 
ant jar 

チェックバージョン:

java -jar build/compiler.jar --version 
+1

また、ローカルに定義を含むexternsファイルを含めることもできます – John

+0

または、コンパイラプロジェクトにプルリクエストを提出して定義を追加します。 –

+0

これはすべてを説明しています:私はそれが時代遅れになっていると思っていましたが(結局setTransformがあります)、何も見つかりませんでした。ありがとう! – dolomighty74