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")))
。
我一直在尝试学习 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")))
。