2014-11-20 22 views
10

我與嗡工作,我沒有完全理解下面的表達式:Clojurescript:表達兩個點

(.. e -target -checked) 

這裏,「E」是一個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))) 

而且代碼的結果是一個更清晰可讀的表達式。正如您所看到的,並行是表單與普通interop相同,但沒有點,所以屬性訪問變爲-prop,方法調用變爲method(無點)。上述

這些形式等同於這個JS形式:

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

閱讀了這個好帖子,詳細瞭解clojurescript的JavaScript互操作形式:http://www.spacjer.com/blog/2014/09/12/clojurescript-javascript-interop/

+0

從鏈接@joaquin共享,也可以使用形式:'(aget js/object「prop1」「prop2」「prop3」)' – pdoherty926 2014-11-25 18:25:28

+0

我想你是指'object [「property」]'而不是'object [property]'(即前者包含引號)。 – George 2016-03-04 08:35:19