2014-11-20 17 views
10

sto lavorando con Om e non ho capito pienamente la seguente espressione:ClojureScript: due punti di espressione

(.. e -target -checked) 

Qui, "E" è un evento di javascript, e "-target -checked" è un modo per accedere alle proprietà, se ho capito bene. Ma per quanto riguarda i due punti all'inizio?

risposta

23

Questa è una delle maschere per l'interlo clojurescript.

Il più fondamentale è

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

Per accedere a diverse proprietà nidificati, c'è una scorciatoia con l'operatore .., in modo che si può fare:

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

Invece di:

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

E il codice risulta in un'espressione più leggibile. Come puoi vedere, il parallelo è che la forma è la stessa dell'interop normale ma senza il punto, quindi l'accesso alla proprietà diventa -prop e le chiamate al metodo diventano method (nessun punto).

Quelle forme di cui sopra sono equivalenti al presente JS forme:

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

documentarsi questo buon posto per conoscere meglio ClojureScript di javascript forme di interoperabilità: http://www.spacjer.com/blog/2014/09/12/clojurescript-javascript-interop/

+0

Dal link @joaquin condiviso, è possibile anche utilizzare la forma: '(aget js/object" prop1 "" prop2 "" prop3 ")' – pdoherty926

+0

Penso che tu intenda 'oggetto [" proprietà "]' invece di 'oggetto [proprietà]' (cioè, il primo include virgolette). – George