4

HTML5 キャンバス描画をしようとしていますが、高度なコンパイル モードで問題が発生しました。これを Mozilla ブラウザーのプロパティで例証したいと思いmozDashます (ただし、この質問は属性最適化機能に関しては非常に一般的です) https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D#Gecko-specific_attributes

JavaScriptcanvas.mozDash = ...コードは、Clojurescriptで[1](set! (.-mozDash canvas) ...)または[2]と表現できます。(aset canvas "mozDash" ...)

以前に [1] を使用したことがあり、ほとんどの場合は機能しましたが、mozDash属性を使用するmozDashと、高度なコンパイル結果で識別子がなくなりました。したがって、[2] を試してみたところ、バリアントmozDashを使用して識別子が保持されているようです。aset

したがって、私の質問は次のとおりです。

  • これは、これらの表記の意図的な違いですか?
  • の動作が異なる ([1] と [2] が機能する) のは(.-fillStyle canvas)なぜですか?

標準の HTML プロパティはデフォルトで保護されていますが、非標準のプロパティ ( などmozDash) はサポートされていないのではないかと思います。

4

1 に答える 1

5

クロージャ コンパイラは、externs または exports で指定されていない直接アクセスされる属性の名前を変更できます。

https://developers.google.com/closure/compiler/docs/api-tutorial3#propnamesを参照してください

具体的には、 は最小化を免除される に変換されますが、 xy が extern または export として指定されない限り、 に(aset x "y" z)変換されて最小化できます。x["y"] = z(set! (.-y x) z)x.y = z

Canvas に使用している externs ファイルで mozDash プロパティが指定されていないと仮定します。

于 2013-06-17T12:09:38.467 に答える