2013-02-24 18 views
5

Değeri almak istediğim bir javascript nesnesinde 'user-agent' adlı bir özelliğim var. Bunu clojurescript'te nasıl yaparım?Clojurescript'te adlarıyla kısa çizgilerle özellikleri nasıl alabilirim?

(js/eval "a = {'user-agent': 'curl/7.22.0'}") 
(js/eval "a['user-agent']") ;=> curl/7.22.0 
(.-user-agent js/a) ;=> (returns nothing) 
(. js/a -user-agent) ;=> (returns nothing) 

Bu özellik, burada özellikler köşeli notasyon yerine nokta notasyonu kullanılarak alındığı için mi? https://github.com/clojure/clojurescript/blob/master/src/clj/cljs/compiler.clj#L734

cevap

7

Kullanım aget: clojurescript derleyici bir tür değişken isimlerinde ? ve ! olarak karakterleri desteklemek amacıyla genişletilmiş desteklemek amacıyla munging bazı isim yapar çünkü

(aget js/a "user-agent") 

nokta notasyonu çalışmaz. Diğer şeylerin yanı sıra, munging adı da alt çizgi çizgilerini değiştirir, böylece (.-user-agent js/a) gibi bir alan erişimi a.user_agent gibi bir şeye derlenir.

clojurescript içinde kaldığınız sürece, mashing adı şeffaftır ve javascript interop yapmıyorsanız, genellikle bunun farkında olmanıza gerek yoktur. Bu durumda, aget ve aset gibi interpo özelliklerini kullanabilirsiniz.

İlgili konular