我有一些Clojurescript代码,以便设置HTML5 Canvas行破折号。由于这是跨浏览器问题的典型案例,我想先检查一下,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(空白)。由于TypeError
:
这有点奇怪,因为.setLineDash
是对象的一部分(并且在空白模式下工作)。我的“感觉”:现在对我来说感觉很奇怪的是调用的m
参数。它是null
,我想知道这是否是这种行为的原因?在某种程度上,我对这里的Javascript内部结构并不太自信。根据{{3}} m
代替this
的{{1}}参数。
答案 0 :(得分:3)
我现在遵循使用an extern.js file并在其中声明setLineDash
的方法。
var CanvasRenderingContext2D = {};
CanvasRenderingContext2D.setLineDash = function() {};
然后我用了
(when (.. c -setLineDash)
(.. c (setLineDash dash)))
编译(高级模式)到
y(a.setLineDash)&&a.setLineDash(c);
这有效(没有.call
古怪)。