.addEventListener
所以這顯然是一個過程調用,但它是一種通用 。這就像Clojurescript把所有在 對象中的東西都拿出來一樣,然後用它來調用「對象」上的方法。 只要該「對象」具有「.addEventListener」屬性,它將調用此函數 。那是它在做什麼?爲什麼不使用關鍵字呢? 喜歡(:addEventListener domElement),這對我來說似乎更符合邏輯。
你的關於這種工作方式的心智模式大多好。它在編譯時的作用是將函數名稱作爲第一個參數的方法運行。
(.method obj ...args)
獲取的轉化爲obj.method(...args)
這種類型的互操作的來自於母語的Clojure。
爲什麼我們有一個明確的版本調用不是Clojure慣用的函數,我認爲這個想法是將本地Clojure代碼與Clojure語義(不變性,對CLJ數據結構友好等)什麼是與主機環境互操作(可變,對CLJ數據結構不友好等)。
在我看來,CLJS和主機平臺的語義有多麼不同,最好在這兩者之間有明確的區分。對我而言,在這種情況下,顯式性比隱含式更好(很容易發現代碼在CLJS中什麼是JS代碼,什麼是純CLJS)。
js/window
這是什麼?它是一個名稱空間還是一個對象?它們是一樣的嗎?
兩者,js/
正在訪問的命名空間js
,這是在CLJS放JS命名空間(因爲僅存在一個和全局)。 window
僅抓取js命名空間的window
變量。
這與您如何訪問CLJS中其他名稱空間中的變量沒有區別。如果你在(ns cljs.test)
然後運行cljs.test/a
那會給你1
。相同的形式,ns/something-in-that-ns
。
"DOMContentLoaded"
字符串,這很熟悉。
\ O/
handler
也比較熟悉,但它有這樣一個概念?不是我真的會想念這個。
不知道this
與handler
有什麼關係。這僅僅是一個高階函數傳入domready
作爲參數,就像你在JS做:function domready (onReady) { window.addEventListener("DOMContentLoaded", onReady) }
我希望這可以幫助,如果你想嘗試一下現場,瞭解更多一些,也許訪問Talking with JS的Diving into ClojureScript教程,或者查看這個section of the lt-cljs-tutorial。
對於'this',您可以使用'this-as'宏。 –
以下是我爲教學互動而編寫的教程之一http://chimeces.com/cljs-browser-repl/#/notebook/diving-into-clojurescript/file/9我希望它有幫助。我會添加一個答案,回答你的問題。 – Joaquin
只是爲了避免混淆,.addEventListener是一個方法調用。還有屬性的概念,可以用.-(週期和減/短劃線)訪問。在OO中,我猜你會說(.method obj)在(。-property obj)訪問對象中的屬性/變量時運行對象方法。 –