2014-11-20 4 views
10

Я работаю с ОМ и я не в полной мере понять следующее выражение:Clojurescript: две точки в выражении

(.. e -target -checked) 

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

ответ

23

Это одна из форм для 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] 

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

+0

Из ссылки @joaquin совместно, вы можете также использовать форма: '(aget js/object" prop1 "" prop2 "" prop3 ")' – pdoherty926

+0

Я думаю, вы имеете в виду 'object [" property "]' вместо 'object [property]' (т. е. первые включают в себя кавычки). – George

Смежные вопросы