如何为js-objects实现(<map> <key>)调用约定?</key> </map>

时间:2013-05-08 20:44:09

标签: clojurescript

我希望能够像哈希映射一样使用(js-obj)以便

 (def a (js* "{'a': 1, 'b':2}"))

 (a :a)
 ;=> 1

我试过这样做:

 (extend-type object
   IFn
   (-invoke
     ([o k] (aget o (strkey k))))

但它不起作用。

1 个答案:

答案 0 :(得分:1)

您可以使用reify。请注意,这意味着您将无法直接访问属性:

(defn convert [obj]
  (reify
    IFn
    (-invoke [obj]
      ([o k] (aget o (strkey k))))))

当然,您可以编写协议,以便在需要时可以访问原始对象。