在ClojureScript REPL

时间:2016-01-11 12:09:39

标签: javascript clojurescript read-eval-print-loop

当我在ClojureScript REPL中访问以下JS对象时,我收到了这个美:

#object[Url [object Object]]

如何检查/查看内部/将其转换为Clojure数据结构?

我发现,当对象是由构造函数使用JavaScript的new关键字创建时,Clojure REPL对对象的内容只保持安静。 (但是像Array这样的内置构造函数似乎是一个例外)

cljs.user=> #js {:a "x"}
#js {:a "x"}

cljs.user=> (defn A [] (this-as my-this (set! (.-a my-this) "x")))
#'cljs.user/A
cljs.user=> (A.)
#object[cljs$user$A [object Object]]

这让我很困惑,因为 - 正如答案中所提到的 - 浏览器的REPL(至少是chrome和firefox)会打印出这些对象的内容。 Node.js REPL也是如此。 函数js-> clj在这里没有帮助。如上面的代码所示,Clojure REPL甚至可以打印未转换的JavaScript对象的内容。

到目前为止,我找不到一种方法来检查整个这类对象的内容。我只能单独访问这些属性。 e.g:

cljs.user=> (.-a (A.))
"x"

有没有人碰到同样的问题,甚至可能找到解决方案或解释?

3 个答案:

答案 0 :(得分:1)

问题是从#object[Url "..."]投射到#object[Object "..."] 最后,我用这个好老助手功能做到了。

(defn clone-js [jsobj]
  (.parse js/JSON (.stringify js/JSON jsobj)))

如果有合适的解决方案,我仍然很感激。

答案 1 :(得分:0)

将其登录到控制台并使用chrome / firefox

查看

答案 2 :(得分:0)

使用js->clj

(def myobj (js->clj yourJsObj))

有关更多互操作示例,请参阅this list

通常,js->cljclj->js有助于进行干预。