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

如何在ClojureScript中创建全局对象,并将字符串和函数附加到该对象?,clojure,clojurescript,Clojure,Clojurescript,如何在ClojureScript中创建一个附加到窗口的全局对象,并将字符串和函数附加到该对象 例如,一个myobject看起来像: {"foo": function () {..}, "bar": "somestring"} myobject.foo=>function(){..} myobject.bar=>“somestring”我不完全确定您为什么需要它,但它与Javascript版本非常相似: {:foo (fn [] ...) :bar "something"} (:foo m

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

例如,一个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版本之间有一些重要的区别

  • Clojurescript映射是不可变的
  • 函数体中没有指向“对象”的
    引用。Clojure映射不是对象,而是键值对

  • 下面是生成附加到窗口的对象的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"))  
    

    你是对的,我应该指定,问题应该是如何通过CLJS将对象附加到浏览器的窗口对象。