2013-02-24 11 views
5

मैं एक संपत्ति का javascript ऑब्जेक्ट है कि मैं का मूल्य प्राप्त करना चाहते हैं में 'उपयोगकर्ता-एजेंट' नाम दिया है। मैं clojurescript में कैसे हैं कि?मैं कैसे clojurescript में उनके नाम में डैश के साथ गुण मिलता है?

(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) 

क्या ऐसा इसलिए है क्योंकि ब्रैकेट नोटेशन के बजाय डॉट नोटेशन का उपयोग करके गुण पुनर्प्राप्त किए जाते हैं? https://github.com/clojure/clojurescript/blob/master/src/clj/cljs/compiler.clj#L734

उत्तर

7

उपयोग aget: क्योंकि clojurescript संकलक कुछ नाम आदेश एक आदेश में इस तरह के ? और चर नाम में ! के रूप में वर्ण का समर्थन करने के लिए बढ़ाया का समर्थन करने के munging करता

(aget js/a "user-agent") 

डॉट नोटेशन काम नहीं करता। अन्य बातों के अलावा, नाम munging भी डैश अंडरस्कोर के लिए, बदल जाता है ताकि इस तरह के (.-user-agent js/a) के रूप में एक क्षेत्र का उपयोग a.user_agent की तरह कुछ में संकलित किया जाता है।

जब तक आप clojurescript के अंदर रहना, नाम munging पारदर्शी है और आप आमतौर पर जब तक आप जावास्क्रिप्ट इंटरॉप कर रहे हैं, इसके बारे में पता होना करने के लिए की जरूरत नहीं है। उस मामले में, आप इस तरह के aget और aset रूप interpo सुविधाओं का उपयोग कर सकते हैं।

संबंधित मुद्दे