我有一些Clojurescript代碼爲了設置HTML5畫布線破折號。由於這是跨瀏覽器問題的典型案例,我想首先檢查Canvas Context對象是否具有屬性setLineDash
,然後調用它(以避免屬性錯誤等)。我選擇了aget
語法,因爲它阻止了名稱的消除。非法調用Chrome和Closure錯誤
(when (aget c "setLineDash")
((aget c "setLineDash") c dash))
相關線路得到由谷歌關閉編譯,在 「空白」 模式:
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內部不太自信以判斷這一點。根據https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/callm
代替fun.call
的參數this
。
看起來不錯! – dnolen