2014-11-20 24 views
10

Pracuję z Om i nie w pełni zrozumieć następujące wyrażenie:Clojurescript: dwie kropki w ekspresji

(.. e -target -checked) 

Tutaj, "e" jest wydarzeniem JavaScript i "-target -checked" jest sposób na dostęp do nieruchomości, jeśli dobrze rozumiem. Ale co z tymi dwoma kropkami na początku?

Odpowiedz

23

To jedna z form współżycia clojurescript.

Najbardziej podstawowym z nich jest

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

W celu uzyskania dostępu do kilku obiektów zagnieżdżonych, istnieje skrót z operatorem .. tak, że można zrobić:

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

Zamiast:

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

Kod ten powoduje, że wyrażenie jest bardziej czytelne. Jak widać, równoległość jest taka, że ​​formularz jest taki sam jak normalny współdziałanie, ale bez kropki, więc dostęp do właściwości zmienia się w -prop, a wywołania metod zmieniają się w method (bez kropek).

formy Te powyżej są równoważne tym JS formy:

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

Przeczytaj tę dobrą wiadomość, aby dowiedzieć się więcej o clojurescript tych javascript formy międzyoperacyjne: http://www.spacjer.com/blog/2014/09/12/clojurescript-javascript-interop/

+0

z linku @joaquin wspólne, można również użyć forma: '(aget js/object" prop1 "" prop2 "" prop3 ")' – pdoherty926

+0

Myślę, że masz na myśli 'object [" property "]' zamiast 'object [property]' (tj. pierwszy zawiera cytaty). – George