js-> clj(+包括原型链中的属性)

时间:2016-01-30 18:07:43

标签: javascript clojure clojurescript

我需要将JavaScript对象转换为Clojure脚本映射。

对于原型Object的JS对象,它是js->clj来完成工作。但是,如果原型是不同的原型,我使用以下解决方法:

(defn jsx->clj [o]
  (reduce (fn [m v] (assoc m (keyword v) (aget o v)))  {} (.keys js/Object o)))

现在适用于大多数情况。但是:由于它使用Object.keys,因此生成的地图仅包含对象自己的属性。

现在我需要转换所有对象的属性。含义包括来自原型链的那些含义。在JavaScript中,这将通过for (.. in ..)循环完成。 see the MDN article for more details on this

如何将其正确翻译为ClojureScript?

或者,一个更普遍的问题,因为我对ClojureScript很陌生:它是不断将JavaScript对象转换为Clojure结构的正确方法吗?当然,我这样做是因为它与clojure宇宙更好地融合。简而言之,我发现用“老生常话”和“aset”来“乱搞”很烦人。另一方面,我必须说我观察自己在这些铸造问题上花了很多时间。嗯,我想这不是一个简单的问题,性能在这里起着巨大的作用。无论如何,以防万一有人在这里有一些“路径”......

0 个答案:

没有答案