如何在 ClojureScript 中创建全局对象,并将字符串和函数附加到该对象?

How can I create a global object, and attach a string and a function to that object, in ClojureScript?

如何在 ClojureScript 中创建一个附加到 window 的全局对象,并将一个字符串和一个函数附加到该对象?

例如,一个 myobject 看起来像:

{"foo": function () {..},
 "bar": "somestring"}

myobject.foo => function () { .. }

myobject.bar => "somestring"

我不完全确定你为什么需要这个,但它与 Javascript 版本非常相似:

{:foo (fn [] ...)
 :bar "something"}

(:foo my-object) => (fn [] ...)
(:bar my-object) => "something"

Clojure 和 Javascript 版本之间存在一些重要差异

  1. Clojurescript 映射是不可变的。
  2. 函数体中没有指向 "object" 的 this 引用。 Clojure 映射不是对象,它们是键值对。

这是生成附加到 window 的对象的 JavaScript。 它也有属性。 foo 是一个函数,.bar 是一个字符串。

(let [my-object (set! (.-myobj js/window (clj->js {})))
      some-func (fn [] (+ 1 1))]

  (set! (.-foo my-object) some-func)
  (set! (.-bar my-object) "something"))