如何在 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 版本之间存在一些重要差异
- Clojurescript 映射是不可变的。
- 函数体中没有指向 "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"))
如何在 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 版本之间存在一些重要差异
- Clojurescript 映射是不可变的。
- 函数体中没有指向 "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"))