4

我正在尝试一些 HTML5 画布绘图,但遇到了高级编译模式的问题。我想用mozDashMozilla 浏览器的属性来举例说明(尽管这个问题在属性优化功能上非常通用)https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D#Gecko-specific_attributes

javascript代码在 Clojurescriptcanvas.mozDash = ...中可以表示为 [1](set! (.-mozDash canvas) ...)或 [2] 。(aset canvas "mozDash" ...)

我之前使用过 [1] 并且它在大多数情况下都有效,但是使用该mozDash属性,mozDash标识符在高级编译结果中消失了。因此我尝试了[2],似乎mozDash使用变体保留了标识符aset

因此,我的问题是:

  • 这是这些符号的有意区别吗?
  • 为什么行为不同([1] 和 [2] 有效)(.-fillStyle canvas)

我有点怀疑标准 HTML 属性默认受到保护,mozDash而不支持非标准属性(如 )。

4

1 回答 1

5

允许闭包编译器重命名未在外部或导出中指定的直接访问的属性。

请参阅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 或导出。

我假设 mozDash 属性未在您用于 Canvas 的 externs 文件中指定。

于 2013-06-17T12:09:38.467 回答