ClojureScriptでJavascriptオブジェクトのプロパティにアクセスする方法を見つけようとしています。物件名を事前に知っていれば簡単です。foo.bar
私がするために
(.-bar foo)
実行時にのみ名前がわかっているプロパティにアクセスする方法はありますか?JS構文に相当するものを探しています
foo[dynamicBar]
ClojureScriptでJavascriptオブジェクトのプロパティにアクセスする方法を見つけようとしています。物件名を事前に知っていれば簡単です。foo.bar
私がするために
(.-bar foo)
実行時にのみ名前がわかっているプロパティにアクセスする方法はありますか?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
:optimizations:advancedコンパイラモードを利用したいが、コードをカバーするexternsファイルがない場合は、文字列名を使用することも重要です。
https://github.com/clojure/clojurescript/wiki/Dependencies#using-string-namesを使用したDavidNolenの例を参照してgoog.object.get
ください
。
動作中aget
。このメソッドは元々、一般的なjsオブジェクトのプロパティではなく、配列要素へのアクセスを提供することを目的としていました。goog.objectのgetメソッドは、意図を伝えるためのより良い方法です。
両方のメソッドの実装は次のとおりです 。https ://github.com/google/closure-library/blob/1b8a893271d790626b5cd652b922675c987f106d/closure/goog/object/object.js#L403
ご覧のとおり、(aget o key)
javascriptコードo[key]
を直接生成しますが、goog.object.getは、キーがoに存在するかどうかを最初にチェックするメソッドを呼び出します。