ClojureScriptでJavascriptオブジェクトのプロパティにアクセスする方法を調べようとしています。私がプロパティの名前を事前に知っていれば、それは簡単です。私は名前だけ実行時にのみ知られているプロパティにアクセスする方法はありClojureScript interop
(.-bar foo)
行う
foo.bar
を取得するには?私はJS構文の同等物を探していますfoo[dynamicBar]
ClojureScriptでJavascriptオブジェクトのプロパティにアクセスする方法を調べようとしています。私がプロパティの名前を事前に知っていれば、それは簡単です。私は名前だけ実行時にのみ知られているプロパティにアクセスする方法はありClojureScript interop
(.-bar foo)
行う
foo.bar
を取得するには?私はJS構文の同等物を探していますfoo[dynamicBar]
aget/asetを使用して、実行時にのみ既知のプロパティにアクセスできます。最適化:高度なコンパイラモードで、しかし、あなたはあなたのコードをカバーする外部宣言ファイルを持っていないあなたはを利用したい場合、文字列名を使用して
;; Use clj->js to convert clj(s) map to javascript.
;; Note the #js {:bar 100} reader literal indicating a js map.
cljs.user> (def foo (clj->js {:bar 100}))
#js {:bar 100}
cljs.user> (.-bar foo)
100
cljs.user> (aget foo "bar")
100
cljs.user> (aset foo "baz" 200)
200
cljs.user> (.-baz foo)
200
は場合にも重要であろう。
goog.object.get
使用を参照してくださいデビッド・ノレンの例: https://github.com/clojure/clojurescript/wiki/Dependencies#using-string-names
ながらaget
作品を。このメソッドはもともとjsオブジェクトのプロパティではなく、配列要素へのアクセスを提供することになっていました。 goog.objectのgetメソッドは、あなたの意図を伝える良い方法です。
は、両方の方法の実装である:あなたが見ることができるように(aget o key)
直接JavaScriptコードo[key]
を生成し、 https://github.com/google/closure-library/blob/1b8a893271d790626b5cd652b922675c987f106d/closure/goog/object/object.js#L403
が、goog.object.getキー場合た最初のチェックメソッドを呼び出しますoに存在する。
goog.object.getを使用しているIMHOは、clojurescriptのアンチパターンです。それは醜いコードになります。小切手が必要な場合は、これを入れないと簡単に入れられません。それが一般的に必要な場合は、間違いなくagetがそれを行うか、それを行うためのオプションのパラメータを持つ必要があります。あるいは、自分自身を単に動かすこともできます。ほとんどのものは、場所のいたるところに醜いクロージャフルネームを置くよりも好ましい。 –
js *の必要を避けて、 '(js-obj" bar "100")を使うことが(少なくとも今日は)可能であることを知りたいかもしれません。 –