Clojurescript: две точки в выражении

Я работаю с Om, и я не полностью понял следующее выражение:

 (.. e -target -checked)

Здесь "e" - это событие javascript, а "-target -checked" - это способ доступа к свойствам, если я хорошо понял. Но как насчет двух точек в начале?

Ответ 1

Эта одна из форм для clojurescript interop.

Самый простой -

(.method object) ; Equivalent to object.method()
(.-property object) ; Equivalent to object[property]

Чтобы получить доступ к нескольким вложенным свойствам, существует ярлык с оператором .., чтобы вы могли:

(.. object -property -property method)
(.. object -property -property -property)

Вместо:

(.method (.-property (.-property object)))
(.-property (.-property (.-property object)))

И код приводит к более читаемому выражению. Как вы можете видеть, параллель заключается в том, что форма такая же, как в обычном режиме, но без точки, поэтому доступ к свойствам превращается в -prop, а вызовы методов превращаются в method (без точки).

Эти формы, приведенные выше, эквивалентны этим формам JS:

object[property][property][method]()
object[property][property][property]

Прочитайте этот хороший пост, чтобы узнать больше о interop-формах clojurescript javascript: http://www.spacjer.com/blog/2014/09/12/clojurescript-javascript-interop/