Clojurescript `.-name` 约定

Clojurescript `.-name` convention

我一直在尝试学习 ClojureScript 并偶然发现了一些非常神秘的函数名称。

例如:

(.-length str)

来自 om 文档:

(defn add-contact [data owner]
  (let [new-contact (-> (om/get-node owner "new-contact")
                        .-value ;;What is this?
                        parse-contact)]
    (when new-contact
      (om/transact! data :contacts #(conj % new-contact)))))

.- 试图表明什么?

这些正在检索本机 JavaScript 属性。因此,(.-length str) 将编译为 JavaScript str.length.

将此与 ClojureScript (.length str) 进行对比,后者将编译为方法调用 str.length() -- 完全不同。


在给定的 om 情况下,代码按顺序执行以下操作:

  • 调用get-node,并取得结果
  • value 属性 结果
  • 使用传递的值调用函数 parse-contact

这是因为线程宏 -> 将每个阶段的结果替换为下一个阶段的第一个参数——使该代码等同于 (parse-contact (.-value (om/get-node owner "new-contact")))