HTML5 Canvas の線ダッシュを設定するために、いくつかの Clojurescript コードがあります。これはクロスブラウザーの問題の典型的なケースであるため、最初に Canvas Context オブジェクトに属性があるかどうかを確認してからsetLineDash
、それを呼び出します (属性エラーなどを回避するため)。aget
名前変更を防ぐため、この構文を選択しました。
(when (aget c "setLineDash")
((aget c "setLineDash") c dash))
関連する行は、「空白」モードで Google Closure によってコンパイルされます。
if(cljs.core.truth_(c["setLineDash"])) {
c["setLineDash"].call(null, c, dash)
}
次に、高度な最適化モードで次のことを行います。
y(a.setLineDash) && a.setLineDash.call(m, a, c);
だから、コンパイルは大丈夫だと思います。a
は c の変更された名前のようですが、y
おそらくcljs.core.truth_
. コードは Mozilla Firefox (adv. と空白の両方) と Google Chrome (空白) で動作します。次の理由により、高度なコンパイルは Google Chrome では機能しませんTypeError
。
オブジェクトの一部であるため、これはちょっと奇妙.setLineDash
です(そして空白モードで動作します)。My "feeling": 今、私が奇妙に感じるm
のは call のパラメーターです。これがnull
この振る舞いの理由なのだろうか?ある意味で、私はこれについて判断するには、Javascript の内部構造にあまり自信がありません。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call によると、 の引数のm
場所にあります。this
fun.call