我正在尝试一些HTML5画布绘图,我遇到了高级编译模式的问题。我想用Mozilla浏览器的mozDash
属性来举例说明这一点(虽然这个问题在属性优化功能上非常通用)https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D#Gecko-specific_attributes
javascript canvas.mozDash = ...
代码可以在Clojurescript中表示为[1] (set! (.-mozDash canvas) ...)
或[2] (aset canvas "mozDash" ...)
。
我之前使用过[1]并且它在大多数情况下都有效,但是使用mozDash
属性,mozDash
标识符在高级编译结果中消失了。因此我尝试了[2]并且似乎使用mozDash
变体保留了aset
标识符。
我的问题是:
(.-fillStyle canvas)
?我怀疑默认情况下标准HTML属性受到保护,而不支持非标准属性(如mozDash
)。
答案 0 :(得分:5)
允许闭包编译器重命名直接访问的属性,这些属性未在externs或exports中指定。
请参阅https://developers.google.com/closure/compiler/docs/api-tutorial3#propnames
具体而言,(aset x "y" z)
转换为免除最小化的x["y"] = z
,而(set! (.-y x) z)
转换为x.y = z
并且可以最小化,除非将xy指定为extern或导出。
我认为在用于Canvas的外部文件中没有指定mozDash属性。