Clojurescript`:optimizations:advanced`中断对数据集的访问

时间:2018-08-14 17:37:17

标签: clojurescript

以下代码:

(set! (.. e -target -dataset -some-field) "some-value")

被编译为:

return a.target.dataset.Qh=Yf(b)

some_field被压缩为Qh。我需要准确地是some_field

我知道这是由于压缩优化。但是有没有办法暗示或绕过这种行为呢?

PS:simple优化可以提供所需的输出

return a.target.dataset.some_field=cljs.core.name.call(null,b)}

2 个答案:

答案 0 :(得分:2)

您可能还对cljs-oops库感兴趣:https://github.com/binaryage/cljs-oops

那么你可以说:

(oset! el "innerHTML" "Hi!")

下面有更多示例,还有on the CLJS Cheatsheet

enter image description here

答案 1 :(得分:1)

问题是some-field(或者是some_field还是someField?)简化为Qh。这是因为编译器不知道dataset对象具有some-field属性。

  • 一种解决方案是编写extern files,以便Google Closure编译器将知道不得重命名给定字段。

  • 另一种解决方案是使用aset function或调用goog.object.set function。这样,您可以使用字符串值引用对象的字段,并且不会简化字符串值。

第二个示例:

cljs.user=> (def a (clj->js {"a" 1}))
#'cljs.user/a

cljs.user=> a
#js {:a 1}

cljs.user=> (aset a "b" 2)
2

cljs.user=> a
#js {:a 1, :b 2}