2013-02-24 27 views
5

Tôi có thuộc tính có tên 'user-agent' trong đối tượng javascript mà tôi muốn nhận giá trị. Làm thế nào để tôi làm điều đó trong clojurescript?Làm cách nào để có được các thuộc tính có dấu gạch ngang trong tên của chúng trong 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) 

Đây có phải là do thuộc tính được truy xuất bằng ký hiệu chấm thay vì ký hiệu khung ở đây? https://github.com/clojure/clojurescript/blob/master/src/clj/cljs/compiler.clj#L734

Trả lời

7

Sử dụng aget:

(aget js/a "user-agent") 

Các ký hiệu dấu chấm không làm việc vì trình biên dịch clojurescript hiện một số tên munging nhằm hỗ trợ một mở rộng để hỗ trợ các nhân vật như ?! trong tên biến. Trong số những thứ khác, tên munging cũng thay đổi dấu gạch ngang thành dấu gạch dưới, để truy cập trường như (.-user-agent js/a) được biên dịch thành một cái gì đó như a.user_agent.

Miễn là bạn ở bên trong clojurescript, tên munging là minh bạch và bạn thường không cần phải nhận thức được nó, trừ khi bạn đang làm javascript interop. Trong trường hợp đó, bạn có thể sử dụng các tính năng tương tác như agetaset.

Các vấn đề liên quan