2013-06-17 3 views
4

일부 HTML5 캔버스 드로잉을 시도하고 있는데 고급 컴파일 모드에서 문제가 발생했습니다. (이 질문은 속성 최적화 기능에 대한 매우 일반적인하지만) 나는 모질라 브라우저의 mozDash 속성이 예시 싶습니다 https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D#Gecko-specific_attributes 자바 스크립트 canvas.mozDash = ... 코드는 [1] (set! (.-mozDash canvas) ...) 또는 Clojurescript에서 [2] (aset canvas "mozDash" ...)과 같이 표현 될 수있다ClojureScript와 클로저 : 속성을 클로저로 이름을 변경하지 못하도록 보호하는 방법

.

이전에 [1]을 사용했지만 대부분의 경우 작동했지만 mozDash 속성을 사용하면 mozDash 식별자가 고급 컴파일 결과에서 사라졌습니다. 따라서 [2] 시도했는데 aset 변형을 사용하여 mozDash 식별자가 유지 된 것으로 보입니다.

내 질문에 따라서 다음과 같습니다

  • 이이 표기법의 의도 차이인가?
  • (.-fillStyle canvas)에 대한 동작이 다른 이유는 무엇입니까 ([1] 및 [2])?

표준 HTML 속성이 기본적으로 보호되는 반면에 표준이 아닌 속성 (예 : mozDash)은 지원되지 않습니다.

답변

5

클로저 컴파일러는 externs 또는 exports에 지정되지 않은 직접 액세스 된 특성의 이름을 바꿀 수 있습니다.

(set! (.-y x) z)x.y = z로 변환하여 X · Y가 통근이나 반출로 지정되지 않은 경우 최소화 될 수 있지만 (aset x "y" z)은 최소화 면제 x["y"] = z로 변환, 즉

https://developers.google.com/closure/compiler/docs/api-tutorial3#propnames 참조.

캔버스에 사용중인 externs 파일에 mozDash 속성이 지정되어 있지 않은 것으로 가정합니다.

+0

실제로, https://groups.google.com/d/msg/clojurescript/uO3MLafNnZ4/G2D5PE6eoqQJ가 이에 대한 메일 링리스트에 대한 최근 토론 인 것으로 나타났습니다. – wirrbel

관련 문제